2016-01-21 100 views
-1

根据我正在运行的测试,是否可以配置setUp方法以使用不同的参数? 在setUp方法中,我有一个类,我想用不同的参数实例化,具体取决于我正在运行的测试。我明白,通常这就是测试方法的用处,但我需要在setUp之前实例化该类。为测试类中的每个测试定制的设置

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

我知道下面的例子不起作用,因为setUp没有引用任何参数,但我正在寻找这些行的内容。

此外,什么会是更好的替代呢?

例子:

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 
+0

你可以像'mySetUp(self,** attrs)'这样的方法并在测试中手动调用它吗? – ddsnowboard

+0

如果setUps根本不常见,则应该使用测试方法进行初始化。如果一些设置很常见,应该将它们放在单独的测试套件中。无论如何,我想我们在这里尝试解决[XY问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。您能否向我们展示一些代码,让我们更好地了解您在此尝试完成的工作? –

+0

是的,这是我想要做的,但我正在寻找一个更优雅的解决方案。这听起来像是一个测试人员可能想要经常做的事情,并且认为可能有一个开箱即用的解决方案。 – Spektor

回答

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 
+0

谢谢,这是一个很好的选择。 – Spektor

+0

重写'__init__'的方法也可能很有用,但可能需要编写一个自定义测试运行器。我从来没有真正看待测试类如何最终实例化。 – chepner

相关问题