python ddtによるデータ駆動

3058 ワード

ddtはサードパーティモジュールです.インストールする必要があります.pip install ddt
DDTはクラスのデザイナddtと2つのメソッドデザイナdata(テストデータを直接入力)を含む
通常、dataのデータは1つのパラメータに従ってテスト例に渡され、dataに複数のデータが含まれている場合は、メタグループ、リスト、辞書などのデータで、スクリプトでデータを分解したり、unpackを使用してデータを分解したりする必要があります.
@data(a,b)
では、aとbはそれぞれ1回の運転例である
@data([a,d],[c,d])
@unpackがない場合は、[a,b]をパラメータ入力例として実行します.
@unpackがある場合,[a,b]は分解され,使用例の2つのパラメータに従って伝達される.
具体的には、次の例を参照してください.

import unittest
from ddt import ddt,data,unpack

@ddt
class MyTesting(unittest.TestCase):
  def setUp(self):
    print('this is the setUp')
  @data([1,2,3])
  def test_1(self,value):
    print(value)

  @data([3,2,1],[5,3,2],[10,4,6])
  @unpack
  def test_minus(self,a,b,expected):
    actual = int(a) - int(b)
    expected = int(expected)
    self.assertEqual(actual, expected)

  @data([2,3],[4,5])
  def test_compare(self,a,b):
    self.assertEqual(a,b)

  def tearDown(self):
    print('this is tearDown')

if __name__ == '__main__':
  unittest.main(verbosity=2)


結果分析:
1. test_1のテスト結果はokであり、[1,2,3]全体としてvalueに渡されるため、すべてのvalue印刷の値は[1,2,3]である.

test_1_1__1__2__3_ (__main__.MyTesting) ... ok
test_compare_1__2__3_ (__main__.MyTesting) ... ERROR
[1, 2, 3]

2. test_minusのテスト結果もokで、@data(...)@unpackを付けて、代表はデータを分解して、3組のテストデータを得て、それぞれ:

1.[3,2,1]
2.[5,3,2]
3.[10,4,6]
test_minus_1__3__2__1_ (__main__.MyTesting) ... ok
test_minus_2__5__3__2_ (__main__.MyTesting) ... ok
test_minus_3__10__4__6_ (__main__.MyTesting) ... ok

3. test_compareのテスト結果はfailのもので、@unpackを付けていないため、やはり2組のテストデータとして理解されるが[2,3]全体としてaに渡され、bは値が入ってこないため、実行するとTypeError:test_compare()missing 1 required positional argument:'b'という言葉が間違っています.

test_compare_1__2__3_ (__main__.MyTesting) ... ERROR
test_compare_2__4__5_ (__main__.MyTesting) ... ERROR

this is the setUp
ERROR: test_compare_1__2__3_ (__main__.MyTesting)
this is tearDown
----------------------------------------------------------------------
Traceback (most recent call last):
 File "D:\python\lib\site-packages\ddt.py", line 139, in wrapper
  return func(self, *args, **kwargs)
TypeError: test_compare() missing 1 required positional argument: 'b'

======================================================================
ERROR: test_compare_2__4__5_ (__main__.MyTesting)
----------------------------------------------------------------------
Traceback (most recent call last):
 File "D:\python\lib\site-packages\ddt.py", line 139, in wrapper
  return func(self, *args, **kwargs)
TypeError: test_compare() missing 1 required positional argument: 'b'


***Data(jsonまたはyamlからテストデータを取得できる)の駆動方式は、次編に続きます.