テストの場合、機能テスト、自動テスト、単体テストのいずれであっても。一般に、正しい期待結果は事前に設定されており、実際の結果はテストの実行中に取得されます。テストの成功は、実際の結果と期待される結果の比較によって決まります。この比較のプロセスは実際にはアサーションです。
Unittest 単体テスト フレームワークでは、assertEqual()、assertIn()、assertTrue()、assertIs() などの豊富なアサーション メソッドが提供されますが、pytest 単体テスト フレームワークは特別なアサーション メソッドを提供せず、Python を直接使用します。アサートはアサートします。
それではassertの使い方を紹介していきます。
サイズと同等性を比較する
test_assert.py
#coding=utf-8
import pytest
# 功能
def add(a,b):
return a + b
# 测试相等
def test_add():
assert add(3,4) == 7
# 测试不相等
def test_add2():
assert add(17,22) != 50
# 测试大于
def test_add3():
assert add(17,22) <= 50
# 测试小于
def test_add4():
assert add(17,22) >= 50
if __name__ == '__main__':
pytest.main("test_assert.py")
add() 関数を定義して、2 つの入力パラメーターの加算を計算し、加算の結果を返します。
また、assert は、「==」、「!=」、「<」、">"、">=、「<=」などの記号を直接使用して、等しい、不等、より小さい、より大きい、より大きい、またはを比較できます。等しいか等しいより小さい。
操作結果:
============================= test session starts =============================
platform win32 -- Python 2.7.10 -- py-1.4.30 -- pytest-2.7.2
rootdir: D:\pyse\pytest\test_case, inifile:
plugins: html
collected 4 items
test_assert.py ...F
================================== FAILURES ===================================
__________________________________ test_add4 __________________________________
def test_add4():
> assert add(17,22) >= 50
E assert 39 >= 50
E + where 39 = add(17, 22)
test_assert.py:22: AssertionError
===================== 1 failed, 3 passed in 0.02 seconds ======================
明らかに、17 を 22 に加算した結果は 50 を超えず、最後のユースケースはすべて失敗します。
テストに含まれるか含まれない
test_assert2.py
#coding=utf-8
import pytest
# 测试相等
def test_in():
a = "hello"
b = "he"
assert b in a
# 测试不相等
def test_not_in():
a = "hello"
b = "hi"
assert b not in a
if __name__ == '__main__':
pytest.main("test_assert2.py")
a および b の文字列変数を定義して、包含関係を比較します。
assert は in と not in を直接使用して、包含と非包含を比較できます。
操作結果:
============================= test session starts =============================
platform win32 -- Python 2.7.10 -- py-1.4.30 -- pytest-2.7.2
rootdir: D:\pyse\pytest\test_case, inifile:
plugins: html
collected 2 items
test_assert2.py F.
================================== FAILURES ===================================
___________________________________ test_in ___________________________________
def test_in():
a = "hello"
b = "hi"
> assert b in a
E assert 'hi' in 'hello'
test_assert2.py:9: AssertionError
===================== 1 failed, 1 passed in 0.01 seconds ======================
明らかに、「hello」には「hi」が含まれていないため、最初のテスト ケースは失敗します。
真か偽をテストする
test_assert3.py
#coding=utf-8
import pytest
#用于判断素数
def is_prime(n):
if n <= 1:
return False
for i in range(2, n):
if n % i == 0:
return False
return True
# 判断是否为素数
def test_true():
assert is_prime(13)
# 判断是否不为素数
def test_true():
assert not is_prime(7)
if __name__ == '__main__':
pytest.main("test_assert3.py")
is_prime() 関数を使用して、n が素数 (1 とそれ自体でしか割り切れない数) かどうかを判断します。戻り値は true または false です。
アサートはオブジェクトが真であるかどうかを直接判断するために補助シンボルを必要としませんが、アサートノットはオブジェクトが偽であるかどうかを判断するために使用されます。
操作結果:
============================= test session starts =============================
platform win32 -- Python 2.7.10 -- py-1.4.30 -- pytest-2.7.2
rootdir: D:\pyse\pytest\test_case, inifile:
plugins: html
collected 1 items
test_assert3.py F
================================== FAILURES ===================================
__________________________________ test_true __________________________________
def test_true():
> assert not is_prime(7)
E assert not True
E + where True = is_prime(7)
test_assert3.py:22: AssertionError
========================== 1 failed in 0.01 seconds ===========================
2 番目のテスト ケースでは、7 が素数であるため、is_prime() 関数の戻り結果は True であり、assert not によって要求される正しい結果は False であるため、テスト ケースの実行は失敗することがわかります。
さあ、テスターの皆さん!計画を改善する必要がある場合は、実行してください。最初から様子見するよりも、途中で行動する方が良いでしょう。未来のあなたはきっと、頑張っている今のあなたに感謝してくれるはずです!