对于鼻子测试类,使用__init __(self)而不是setup(self)是否有缺点?

时间:2013-01-11 21:13:20

标签: python nose

运行nosetests -s
class TestTemp():

    def __init__(self):
        print '__init__'
        self.even = 0

    def setup(self):
        print '__setup__'
        self.odd = 1

    def test_even(self):
        print 'test_even'
        even_number = 10
        assert even_number % 2 == self.even

    def test_odd(self):
        print 'test_odd'
        odd_number = 11
        assert odd_number % 2 == self.odd

打印出以下内容。

__init__
__init__
__setup__
test_even
.__setup__
test_odd
.

测试实例在测试运行之前创建,而安装程序在测试之前运行。

对于一般情况,__init__()和setup()完成同样的事情,但使用__init__()而不是setup()有不利之处吗?或者同时使用两者?

2 个答案:

答案 0 :(得分:2)

是的,你应该为测试创建一个干净的平板,并保持你的个别测试。

看起来测试实例(每个测试一个)是在一个批处理中创建的,而setup是在每个测试之前调用的。如果您的设置需要重置外部状态,则需要在setup中执行此操作;如果你要在__init__进行单独的测试,可以在其余的测试运行中搞砸那个外部状态。

答案 1 :(得分:2)

虽然__init__可以替代setUp,但您应该坚持使用setUp,因为它是编写测试的程式化协议的一部分。它还有一个tearDown__init__没有,__init__没有的类和模块级对应物。

编写测试类与编写普通类不同,因此您应该坚持使用用于编写测试类的样式。