7

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
.

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

对于一般情况, setup() 完成同样的事情,但是使用setup() 代替 setup()__init__()有缺点吗?__init__()还是两者都用?

4

2 回答 2

2

是的,您应该为测试创建一个干净的状态,并保持您的各个测试隔离。

似乎测试实例(每个测试一个)是在一批中创建的,而setup在每次测试之前都会被调用。如果您的设置需要重置外部状态,您需要在setup; 如果您要在__init__单个测试中执行此操作,则可能会在其余测试运行中搞砸该外部状态。

于 2013-01-11T21:19:03.683 回答
2

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

编写测试类与编写普通类不同,所以你应该坚持编写测试类的风格。

于 2013-01-12T12:56:45.663 回答