我有一个课程,我想用内置的unittest模块测试它。特别是我想测试我是否可以创建intances而不会抛出错误,如果我可以使用它们。
问题是这个对象的创建速度很慢,所以我可以在setUpClass
方法中创建对象并重用它们。
@classmethod
def setUpClass(cls):
cls.obj = MyClass(argument)
def TestConstruction(self):
obj = MyClass(argument)
def Test1(self):
self.assertEqual(self.obj.metohd1(), 1)
重点是
TestConstruction
如果有办法在其他测试之前设置TestConstruction
,我会很高兴。
答案 0 :(得分:2)
为什么不在同一测试中测试初始化和功能?
class MyTestCase(TestCase):
def test_complicated_object(self):
obj = MyClass(argument)
self.assertEqual(obj.method(), 1)
或者,您可以对案例对象初始化进行一次测试,对其他测试进行一次测试用例。这意味着你必须创建两次对象,但这可能是一个可接受的权衡:
class CreationTestCase(TestCase):
def test_complicated_object(self):
obj = MyClass(argument)
class UsageTestCase(TestCase):
@classmethod
def setupClass(cls):
cls.obj = MyClass(argument)
def test_complicated_object(self):
self.assertEqual(obj.method(), 1)
请注意,如果您使用方法改变对象,那么您将遇到麻烦。
或者,您可以这样做,但我再也不建议
class MyTestCase(TestCase):
_test_object = None
@classmethod
def _create_test_object(cls):
if cls._test_object is None:
cls._test_object = MyClass(argument)
return cls._test_object
def test_complicated_object(self):
obj = self._create_test_object()
self.assertEqual(obj.method(), 1)
def more_test(self):
obj = self._create_test_object()
# obj will be cached, unless creation failed