我有从unittest.TestCase继承的测试类。我像这样多次加载类:
tests = [TestClass1, TestClass2]
for test in tests:
for var in array:
# somehow indicate that this test should have the value of 'var'
suite.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(test))
事实上,我想将'var'的值传递给每个测试,但我不能使用类变量,因为它们在类的每个实例之间共享,而且我无法访问实际执行的代码对象的实例化。实现这个目标的最佳方法是什么?
答案 0 :(得分:2)
我认为,即使您无法访问实现测试用例的类,也可以对它们进行子类化并重载setUp
方法。
答案 1 :(得分:0)
我认为你这是错误的做法。而不是做你正在尝试的东西,为什么你不这样做,说你在课堂上:
from my_tests.variables import my_array
class TestClass1(unittest.TestCase):
def setUp():
....initializations...
def tearDown():
....clean up after...
def my_test_that_should_use_value_from_array(self):
for value in my_array:
test_stuff(value)
答案 2 :(得分:0)
更新:
因为你需要:
考虑一下:
setUp()
TestCase.id()
方法从值地图中查找MyTestCase的值(如下例所示)。 unittest
方便id()
method,以filename.testclassname.methodname
格式返回测试用例名称。
所以你可以像这样使用它:
import unittest
my_variables_map = {
'test_01': 'foo',
'test_02': 'bar',
}
class MyTest(unittest.TestCase):
def setUp(self):
test_method_name = self.id() # filename.testclassname.methodname
test_method_name = test_method_name.split('.')[-1] # method name
self.variable_value = my_variables_map.get(test_method_name)
self.error_message = 'No values found for "%s" method.' % test_method_name
def test_01(self):
self.assertTrue(self.variable_value is not None, self.error_message)
def test_02(self):
self.assertTrue(self.variable_value is not None, self.error_message)
def test_03(self):
self.assertTrue(self.variable_value is not None, self.error_message)
if __name__ == '__main__':
unittest.main()
这会给你:
$ python /tmp/ut.py
..F
======================================================================
FAIL: test_03 (__main__.MyTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/ut.py", line 25, in test_03
self.assertTrue(self.variable_value is not None, self.error_message)
AssertionError: No values found for "test_03" method.
----------------------------------------------------------------------
Ran 3 tests in 0.000s
FAILED (failures=1)
$
答案 3 :(得分:0)
我发现Data-Driven Tests(滴滴涕 - 不是农药)包对此有帮助。