は、ボイラープレートコードを減らすために私はすべてのパラメータなしのメソッドのクラステスターでテストケースを生成するという考えに出くわしました。 py.testを実行する上でパラメータレスメソッドのテストケースを自動生成する方法は?
、それだけでが動的にsetattr(Tester,'test_' + name, member)
を使用してテストケースを作成し静的に書かれたテストケース(test_a、TEST_B)を認識するだけではないかもしれpy.testはすでにクラスのテスターを視察しましたsetUpClassが呼び出される前に 'test_ *'を持つメソッドのために?どのようにこれを実行するヒント?
import inspect
import unittest
class Testee:
def a(self):
print('a')
def b(self):
print('b')
#...
#...
def z(self):
print('z')
class Tester(unittest.TestCase):
@classmethod
def setUpClass(cls):
testee = Testee()
for name, member in inspect.getmembers(object=testee, predicate=inspect.ismethod or inspect.iscoroutine):
if len(inspect.signature(member).parameters):
print(str(inspect.signature(member).parameters))
setattr(Tester,'test_' + name, member)
if inspect.isfunction(member) or inspect.ismethod(member):
setattr(Tester,'test_' + name, member)
elif inspect.iscoroutinefunction(member):
setattr(Tester,'test_' + name, functools.partialmethod(TestInstrument.run_coro, member))
else:
print(member)
return super().setUpClass()
def test_a(self):
Tester.testee.a()
def test_b(self):
Tester.testee.b()
=============================テストセッションが開始さ========= ====================プラットフォームのWin32 - Pythonの3.5.1、pytest-2.9.2、PY-1.4.31、pluggy-0.3.1 - C: \プログラム ファイルは、\ python35 \ python.exe CACHEDIR:.cache ROOTDIR:C:\テスト、INIFILE: 収集2品目
sandbox.py::Tester::test_aはsandbox.py::Tester::test_bを可決しました============== 0.03秒で渡さ
========================== 2を可決=============
EDIT:私は、py.test検出し、(クラス外)グローバルスコープにsetupClassのコードを移動して自動生成されたテストケースを実行している場合。私の「編集」については詳しく説明し
テストクラスをインスタンス化する場所に投稿してください。また、setattrに 'Tester'の代わりに' cls'を使用してください。 –
@Vincenzzzochiのpy.testは私のためにinstantationを行います。 – goldcode