我在Python中测试相当新,我遇到了一些我无法理解的奇怪行为。
我已经模拟了类MockedClass
,我在两个这样的测试类中使用它(两个类都在同一个文件中):
头等舱:
class TestClass1(unittest.TestCase):
def setUp(self):
self.mocked_object_1 = MockedClass()
第二课:
class TestClass2(unittest.TestCase):
def setUp(self):
self.mocked_object_2 = MockedClass()
模拟对象作为参数传递给测试函数。现在发生的是,当这两个测试分别运行时(在不同的文件中),这些类中的所有测试都是成功的,但是当它们都在同一个文件中运行时,TestClass2
中的所有测试用例都会失败。
我设法通过声明全局temp_mocked_object
来解决这个问题(
class TestClass1(unittest.TestCase):
def setUp(self):
temp_mocked_object = self.mocked_object_1
self.mocked_object_1 = MockedClass()
def tearDown(self):
self.mocked_object_1 = temp_mocked_object
但我不明白为什么会出现这个问题,更不用说为什么这个解决方案有效了。最让我困惑的是,尽管存在不同的模拟对象名称,但第二次测试失败了。
模拟类的结构是这样的:
class MockedClass(someScript.OriginalClass):
def __init__(self):
# some unimportant objects are initialized here
我正在使用较旧的Python版本(2.7),但我认为这无关紧要。
所以我非常感谢对这里发生的事情做出某种解释,因为我在其他地方找不到答案。