Python 如何在单元测试中保持相同的类实例?
我正在为我的类编写一些单元测试,我注意到每个测试都会重置类Python 如何在单元测试中保持相同的类实例?,python,Python,我正在为我的类编写一些单元测试,我注意到每个测试都会重置类 import unittest from module import ClassA class TestA(unittest.TestCase): def setUp(self): self.a = ClassA() def firstTest(self): # Test method and assign instance variables to self.a def s
import unittest
from module import ClassA
class TestA(unittest.TestCase):
def setUp(self):
self.a = ClassA()
def firstTest(self):
# Test method and assign instance variables to self.a
def secondTest(self):
# Test method with assumption that self.a still have those variables
# Fails because instance variables are reset
unittest
是否为每个单独的测试运行setUp()
?如果是这样的话,我如何更新并在所有测试中使用相同的类实例?欢迎来到测试世界!,这需要一段时间来适应,但据我所知,这帮我节省了好几次时间
这里有几个问题(最后的答案在底部)
class TestA(unittest.TestCase):
def setUp(self):
self.a = OrderedDict()
print("function 'setUp' was called !")
@classmethod
def setUpClass(cls):
cls.b = OrderedDict()
print("function 'setUpClass' was called !")
def test_firstTest(self):
# Test method and assign instance variables to self.a
self.assertEqual(1, 1)
def test_secondTest(self):
# Test method with assumption that self.a still have those variables
# Fails because instance variables are reset
self.assertEqual(1, 1)
单元测试不一定测试单个函数或方法;您可以有多个单元测试来测试同一函数的不同方面。例如,函数
def some_func(x):
if x % 2 == 0:
return "even"
else:
return "odd"
应该至少有两个测试:一个测试检查它是否为偶数值返回“偶数”
,另一个测试检查它是否为奇数值返回“奇数”
。如果参数不支持%
,第三个测试可能会检查它是否引发了适当的异常
fixture是可以运行测试的环境,由TestCase
表示。TestCase
中定义的每个测试都使用相同的夹具,在运行每个测试之前都是新创建的
import unittest
from module import ClassA
class TestA(unittest.TestCase):
def setUp(self):
self.a = ClassA()
def firstTest(self):
# Test method and assign instance variables to self.a
def secondTest(self):
# Test method with assumption that self.a still have those variables
# Fails because instance variables are reset
现在,在您的例子中,如果secondTest
确实依赖于firstTest
的结果,那么这意味着secondTest
依赖于一个独立的夹具,而不是firstTest
。这需要一个单独的TestCase
,以确保为secondTest
正确运行创建适当的条件
比如说,
# Tests that simply require an instance of ClassA
class TestA(unittest.TestCase):
def setUp(self):
self.a = ClassA()
def firstTest(self):
# Test method and assign instance variables to self.a
# Tests that require a particular configuration of an instance of ClassA
class TestB(unites.TestCase):
def setUp(self):
self.a = ClassA()
self.a.x = 6 # For example
def secondTest(self):
# Test something that requires self.a.x be set to 6 first
一个好的测试运行者不会按顺序执行每个测试;它将随机化它们的顺序(不考虑它们在测试夹具中的分组),这样就没有一个测试可以依赖于在另一个测试之前或之后执行。单元测试应该是独立的。如果
secondTest
依赖于先运行firstTest
,那么这不是两个测试。这是一个大的测试,要么放在一个方法中,要么修改以删除依赖关系。是的,我也同意@user2357112。单元测试不应该是依赖的。如果测试依赖于集成、功能或端到端测试用例。有时需要单独的设置,例如SQL或读取非常大的文档,请尝试setUpClass()¨(需要用@classmethod修饰,请参见)我明白了。我认为单元测试意味着我只测试每个函数或方法的功能。因此,最好使用自己的实例变量独立编写每个测试,并且只测试这些变量?这并不能将实例变量从test\u firstTest
保存到test\u secondTest
,甚至不能保证test\u firstTest
实际首先运行,或者根本不跑步。感谢您详细阐述夹具的概念。我开始进行测试,认为我可以编写一个类来测试另一个类。你的回答告诉我我需要做什么。