0

我有一个unittest包含四个测试类的测试文件,每个测试类负责在一个特定类上运行测试。每个测试类都使我们使用完全相同的set-up方法teardown。该set-up方法相对较大,启动了大约 20 个不同的变量,而该teardown方法只是将这 20 个变量重置为初始状态。

到目前为止,我已经在四个 setUp 类中的每一个中放置了 20 个变量。这可行,但不是很容易维护;如果我决定更改一个变量,我必须在所有四个 setUp 方法中更改它。然而,我寻找更优雅的解决方案失败了。理想情况下,我只想输入我的二十个变量一次,在我的四个setup方法中调用它们,然后在我的每个测试方法之后将它们删除。考虑到这一点,我尝试将变量放在一个单独的模块中并在每个 setUp 中导入它,但是当然这些变量只能在 setup 方法中使用(另外,虽然我无法说出确切的原因,这感觉像是一种可能容易出现问题的方法

from unittest import TestCase

class Test_Books(TestCase):
    def setup():
        # a quick and easy way of making my variables available at the class level
        # without typing them all in

    def test_method_1(self):
        # setup variables available here in their original state
        # ... mess about with the variables ...
        # reset variables to original state

    def test_method_2(self):
        # setup variables available here in their original state
        # etc...

    def teardown(self):
        # reset variables to original state without having to type them all in



class Books():
    def method_1(self):
        pass

    def method_2(self):
        pass
4

2 回答 2

1

我要做的是使 4 个测试类中的每一个成为一个基本测试类的子类,该基本测试类本身就是 TestCase 的子类。然后将 setip 和 teardown 放在基类中,其余的放在其他类中。

例如

class AbstractBookTest(TestCase):
   def setup():
      ...

class Test_Book1(AbstractBookTest):
   def test_method_1(self):
     ...

另一种方法是只创建一个类而不是你拥有的四个类,这在这里似乎更合乎逻辑,除非你给出分裂的理由。

于 2012-09-07T10:21:17.517 回答
1

另一种方法是将二十个变量放入一个单独的类中,设置类中的值,__init__然后以 class.variable 的形式访问数据,因此只有在 s 中设置变量的地方,__init__并且代码 s 不重复。

class Data:
    def __init__(self):
        data.x= ...
        data.y = ....

class Test_Books(TestCase):
    def setup():
        self.data = Data()

    def test_method_1(self):
       value = self.data.x   # get the data from the variable

如果这 20 条数据彼此相关,则此解决方案更有意义。此外,如果您有 20 条数据,我希望它们是相关的,因此它们应该结合在实际代码中,而不仅仅是在测试中。

于 2012-09-07T10:30:18.690 回答