在 类 之间使用相同的变量并继续进行单元测试

Using the same variables and continuing unittests between classes

我希望有人将此标记为重复,但如果是,我找不到相关问题。

我有一个情况,我有 2 个测试 classes,其中 ClassA 需要设置 x,ClassB 重用设置 x,但还有一个额外的步骤 y。

import my_module as m

class TestClassA(unittest.TestCase):
    def setUp()
        self.a = 1
        self.b = 2
        self.c = 3
        self.d = m.initialiase_function(self.a, self.b, self.c)

    def test1(self)
        pass

    def test2(self)
        pass

class TestClassB(unittest.TestCase):
    def setUp():
        self.a = 1
        self.b = 2
        self.c = 3
        self.d = m.initialise_function(self.a, self.b, self.c)
        m.complete_function(self.c)

    def test3(self):
        pass

    def test4(self):
        pass

我试过使用 setUpModule(),但这只意味着我在每个测试 classes 中也需要大量 global 语句,但事实并非如此似乎也是正确的“pythoninc”做事方式。

我还尝试将所有测试放在同一个 class 中,因此他们共享 ClassA 的设置,然后调用 m.complete_function() 作为 test3 的一部分,但是那么我的测试不会 运行。

在这个特定的实例中,进行两次设置和拆卸可能不是很大的开销,但我也想找出 "correct" 的方法以供将来参考。

很简单:分解出公共代码,使其位于单独的函数中,然后从每个 setUp() 方法。这避免了重复定义。

如果您还想重用您创建的状态,您需要在某个共享命名空间中的某个变量可以存储创建的状态。通常这将是一个单例,附加到模块级别或一些公共超类;但您也可以设置一些注册表对象来保存引用,这样您就可以同时拥有多个实例。 但是, 根据我的经验,每个测试通常都会进行自己的设置,即使这意味着重复工作,以确保 "fixture" 没有被早期测试无意中修改。