3

我只是在学习如何进行单元测试。我在 Python/nose/Wing IDE 上。

(我正在为其编写测试的项目是一个模拟框架,除此之外,它允许您同步和异步运行模拟,并且模拟的结果应该在两者中相同。)

问题是,我希望我的一些测试使用在其他测试中创建的模拟结果。例如,synchronous_test在同步模式下计算某个模拟,但是我想在异步模式下计算它,并检查结果是否相同。

我该如何构建这个?我是将它们全部放在一个测试功能中,还是单独制作一个asynchronous_test?我是否将这些对象从一个测试功能传递到另一个?

另外,请记住,所有这些测试都将通过测试生成器运行,因此我可以对程序中包含的每个模拟包进行测试。

4

2 回答 2

6

一般来说,我建议不要让一项测试依赖于另一项测试。进行同步测试,进行异步测试,将它们与预期的正确输出进行比较,而不是相互比较。

所以像:

class TestSimulate(TestCase):
    def setup(self):
        self.simpack = SimpackToTest()
        self.initial_state = pickle.load("initial.state")
        self.expected_state = pickle.load("known_good.state")

    def test_simulate(self):
        state = simulate(self.simpack, self.initial_state)
        # assert_equal will require State to implement __eq__ in a meaningful
        # way.  If it doesn't, you'll want to define your own comparison 
        # function.
        self.assert_equal(self.expected_state, state)

    def test_other_simulate(self):
        foo = OtherThing(self.simpack)
        blah = foo.simulate(self.initial_state)
        state = blah.state
        self.assert_equal(self.expected_state, state)
于 2010-03-27T20:38:29.073 回答
6

您可以将每个类需要计算一次的测试添加到该类的“设置”中。举个例子:

from nose.tools import *
class Test_mysim():
    def setup(self):
        self.ans = calculate_it_once()

    def test_sync(self):
        ans=calculate_it_sync()
        assert_equal(ans,self.ans)

    def test_async(self):
        ans=calculate_it_async()
        assert_equal(ans,self.ans)
于 2010-03-27T20:58:49.053 回答