3

単体テストの方法を学んでいます。私は Python/nose/Wing IDE を使用しています。

(私がテストを書いているプロジェクトはシミュレーション フレームワークであり、とりわけ、同期と非同期の両方でシミュレーションを実行でき、シミュレーションの結果は両方で同じになるはずです。)

問題は、一部のテストで、他のテストで作成されたシミュレーション結果を使用することです。たとえばsynchronous_test、あるシミュレーションを同期モードで計算した後、非同期モードで計算して、結果が同じであることを確認したい。

これをどのように構造化しますか?それらをすべて 1 つのテスト関数に入れるか、別の関数にし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

クラスごとに 1 回計算する必要があるテストを、そのクラスの「セットアップ」に追加できます。例として:

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 に答える