首页 > 解决方案 > 在类之间使用相同的变量和持续的单元测试

问题描述

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

我有一个情况,我有 2 个测试类,其中 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(),但这只是意味着我global在每个测试类中也需要大量语句,而且这似乎也不是正确的“pythoninc”做事方式。

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

在这种特殊情况下,进行两次设置和拆卸可能不是很大的开销,但我也想找出“正确”的方法以供将来参考。

标签: pythonpython-3.xpython-unittest

解决方案


很简单:将通用代码分解出来,使其位于一个单独的函数中,然后self从每个方法中调用它(如果适合您的情况,可以使用作为参数和稍微不同的配置选项)setUp()。这样可以避免重复定义。

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


推荐阅读