34

私はPythonを初めて使用し、Rubyでよく行うことをしようとしています。つまり、一連のインデックスを反復し、それらを関数の引数として使用し、その結果をフィクスチャ出力の配列と比較します。

というわけでいつものRubyと同じように書いてみたのですが、テストケースは1つだけになりました。

  def test_output(self):
    for i in range(1,11):
      ....
      self.assertEqual(fn(i),output[i])

範囲内のすべてのアイテムのテストを取得しようとしています。どうやってやるの?

4

4 に答える 4

16

unittest を使用すると、2 つのシーケンスの違いをすべて 1 つのテスト ケースで表示できます。

seq1 = range(1, 11)
seq2 = (fn(j) for j in seq1)
assertSequenceEqual(seq1, seq2)

それが十分に柔軟でない場合、unittest を使用して複数のテストを生成することは可能ですが、少し注意が必要です。

def fn(i): ...
output = ...

class TestSequence(unittest.TestCase):
    pass

for i in range(1,11):
    testmethodname = 'test_fn_{0}'.format(i)
    testmethod = lambda self: self.assertEqual(fn(i), output[i])
    setattr(TestSequence, testmethodname, testmethod)

Nose は、テスト ジェネレーターを使用して上記の作業を容易にします。

import nose.tools

def test_fn():
    for i in range(1, 11):
        yield nose.tools.assert_equals, output[i], fn(i)

同様の質問:

于 2013-09-28T21:14:36.810 に答える