可自定义的setUp,用于测试类中的每个测试

时间:2016-01-21 15:02:31

标签: python unit-testing

是否可以根据我正在运行的测试来配置setUp方法以使用不同的参数? 在setUp方法中,我有一个类,我想用不同的参数实例化,这取决于我正在运行的测试。我理解通常这是测试方法的用途,但我需要在setUp之前实例化该类。

我有一个解决方案是创建另一个方法来完成我想要setUp做的所有事情然后在每次测试中调用它,但我想知道内置的setUp方法是否能够做到这一点?

我知道下面的示例不起作用,因为setUp不接受任何args,但我一直在寻找这些内容。

另外,什么是更好的替代方案?

示例:

class TestComponents(unittest.TestCase):

    def __init__(self, *args, **kwargs):
        self.app = MyApplication()
        unittest.TestCase.__init__(self, *args, **kwargs)

    def setUp(component):
        self.app.start([component])

    def testComponent1():
        # test continues here

    def testComponent2():
        # test continues here

1 个答案:

答案 0 :(得分:1)

为测试定义基类。 setUp方法可以引用包含您要更改的参数的类属性。

class TestBase(unittest.TestCase):
    def setUp(self):
        # do something with self.MYPARAMETER

然后将测试划分为一组子类,每个子类以不同的方式定义MYPARAMETER。您可能需要也可能不需要在本地定义setUp,具体取决于代码本身是否需要扩展 你可以放在TestBase.setUp

class Test1(TestBase):
    MYPARAMETER = 1
    def setUp(self):
        TestBase.setUp(self)
        # etc

class Test2(TestBase):
    MYPARAMETER = 17
    def setUp(self):
        TestBase.setUp(self)
        # etc