Ram*_*hum 3 python unit-testing nose
我正在学习如何进行单元测试.我在使用Python/nose/Wing IDE.
(我正在编写测试的项目是一个模拟框架,除此之外,它还允许您同步和异步地运行模拟,并且两者中的模拟结果应该相同.)
问题是,我希望我的一些测试能够使用在其他测试中创建的模拟结果.例如,synchronous_test在同步模式下计算某个模拟,但后来我想在异步模式下计算它,并检查结果是否相同.
我该如何构建这个?我是将它们全部放在一个测试功能中,还是单独进行asynchronous_test?我是否将这些对象从一个测试函数传递给另一个?
另外,请记住,所有这些测试都将通过测试生成器运行,因此我可以对我的程序中包含的每个模拟包进行测试.
一般来说,我建议不要依赖另一个测试.执行synchronous_test,执行asynchronous_test,将它们各自与预期的正确输出进行比较,而不是相互比较.
所以类似于:
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)
Run Code Online (Sandbox Code Playgroud)
您可以将每个类需要计算一次的测试添加到该类的"设置"中.举个例子:
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)
Run Code Online (Sandbox Code Playgroud)