あなたはその上のユニットテストフレームワーク、Pythonのunittestの、pytest、JavaのJUnitの、TestNGのとを使用する場合があります。
だから、ユニットテストを何だろう!もちろん、何が難しいですか?
test_demo.py
def inc(x):
return x + 1
def test_answer():
assert inc(3) == 4
incが()でテスト機能によって定義されtest_anserver()コードの上記試験片のために。
上記のコードを実行してPytest:
> pytest test_demo.py
====================== test session starts ======================= platform win32 -- Python 3.7.1, pytest-5.0.1, py-1.8.0, pluggy-0.12.0
rootdir: D:\vipcn\demo
plugins: cov-2.7.1, forked-1.0.2, html-1.20.0, metadata-1.8.0, ordering-0.6, parallel-0.0.9, rerunfailures-7.0, xdist-1.28.0, seleniumbase-1.23.10
collected 1 item
test_demo.py . [100%]
==================== 1 passed in 0.08 seconds ====================
ユニットテストは、そう、単一のものではありません!
次に、Webプロジェクトのユニットテストはどのように行うには?
私たちは、Webフレームワークは、例えば、それはDjangoのMTV
開発モデル。次は、このモデルの周りになりますテストを行う方法について説明します。
モデルのテスト
- モデルM手段は、オブジェクトと記述データベース間メタデータのマッピングを使用して、ORM、すなわち、オブジェクト・リレーショナル・マッピングを定義するために、オブジェクト指向のオブジェクト言語プログラムが自動的にリレーショナル・データベースに永続しました。
models.pyコードはようなものです:
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField(auto_now=True)
これは、2つのクラス、すなわち、クラスにない2つのパラメータを定義し、値が返されないリターンはありません。どのようにそれをテストするには?
次のようにテストコードがあります:
from django.test import TestCase
from myapp.models import Question
class QuestionTestCase(TestCase):
def setUp(self):
Question.objects.create(id=1, question_text="你会做单元测试么?")
def test_question(self):
"""查询id=1的问题"""
question = Question.objects.get(id=1)
self.assertEqual(question.question_text, '你会做单元测试么?')
あなたは私たちがデータベーステーブルとして見ることができるコード、Djangoのモデルを読めば、私は知らないし、手術台に用されるCRUDデータの最初の部分が作成され、その後、このデータをチェックアウトし、正しいであるフィールドを決定します。
参考ます。https://docs.djangoproject.com/en/2.2/topics/testing/overview/
ビューのテスト
- Vは、ビューに送信された要求を受信するためのフロントエンドを指し、データベースを呼び出す必要があり、その後、対応するデータ処理、および一緒にフロントエンドにHTMLページを返すことができます。
次のようにviews.pyコードは次のとおりです。
from django.shortcuts import render
from .models import Question
def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
context = {'latest_question_list': latest_question_list}
return render(request, 'polls/index.html', context)
インデックス()ビューは、関数のパラメータを持っている、リクエストは、リクエストメソッド、要求ホスト、要求ヘッダーヘッダ、これらのデータを構築する方法をクライアントとして、クライアント情報が含まれて?行うこれらのアサーションにデータを書き込む方法、リターンは、HTMLページを返し、データがデータベースに問い合わせ?
次のようにテストコードがあります:
from django.test import TestCase
from myapp.models import Question
class IndexTestCase(TestCase):
def setUp(self):
Question.objects.create(id=1, question_text="你会做单元测试么?")
def test_index(self):
"""测试index视图"""
response = self.client.get("/index")
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "polls/index.html")
ブラウザが訪れたときにそれがあるとするhttp://127.0.0.1:8000/index呼び出すとき、インデックス表示、バックリストページへの問題。
self.client.get()クライアントブラウザを偽装することができますが、要求のGETリクエストを送信します。ステータスコード200かどうかを判断、応答のサービス側を取得します。self.assertTemplateUsed()述語は、ページが正しいかを返します。
参考ます。https://docs.djangoproject.com/en/2.2/topics/testing/tools/
マスク・テスト
- TはTeamplate、主にHTMLページを参照します。ユーザーは、最終的にHTMLページを取得するブラウザにURLを入力します。
次のようにindex.htmlのコードは次のとおりです。
{% if latest_question_list %}
<ul>
{% for question in latest_question_list %}
<li><a name="q" href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}
コードでさえ方法は、パラメータや戻り値を言及すると、HTMLコードをテストする方法を尋ねることはない、存在しないのですか?
私たちは本当に直接テストするHTMLコードに方法がありません。ただし、UIは、ページの正確さを保証するように、自動テストを行うためにセレンを利用することができます。
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from selenium import webdriver
class MySeleniumTests(StaticLiveServerTestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.selenium = webdriver.Chrome()
cls.selenium.implicitly_wait(10)
@classmethod
def tearDownClass(cls):
cls.selenium.quit()
super().tearDownClass()
def test_index_page(self):
self.selenium.get('%s%s' % (self.live_server_url, '/index'))
question_list = self.selenium.find_elements_by_name("q")
for q in question_list:
print(q.text)
Djangoはカプセル化StaticLiveServerTestCaseを使用すると、実行時にUIテストが自動的にDjangoのサービスを開始するように、。だから、あなたは直接使用することができますself.live_server_urlのアクセス・サービス・アドレスDjangoが始まりました。
参考ます。https://docs.djangoproject.com/en/2.2/topics/testing/tools/
この記事では、プロジェクトのユニットテストのご理解をリフレッシュしましたか?そこで問題は、私は上記のコード書かに属する一部であるユニットテスト?