0

私は以下を使用してPythonでユニットテストを書いていますassertEqual:

def test_SetOwner(self, owner):
   self.objectid.SetOwner(owner)
   self.assertEqual(self.objectid.GetOwner(), owner)

これはほとんどの場合に機能しますが、一部の特定の状況では、これが でRuntimeError始まることで失敗しCould not execute...ます。ただし、ユニットテスト スイートでエラーが発生しないことが期待されます。

assertEqual他のすべての RuntimeErrors をキャッチしながら、この特定の文字列で始まる RuntimeErrors で失敗しないようにする方法はありますか? または、これを処理するためのより良い方法はありますか?

4

1 に答える 1

2

ブロックを使用してこれを行うことができtry/except、2 つのケースを別々に確認できます。

def test_SetOwner(self, owner):
    self.objectid.SetOwner(owner)
    try:
        owner_prime = self.objectid.GetOwner()
    except RuntimeError as e:
        self.assertTrue(e.args[0].startswith("Could not execute"))
    else:
        self.assertEqual(owner, owner_prime)

しかし、上記の私のコメントで述べたように、これはあまり良い単体テストのようには見えません。例として、GetOwner()ある時点でバグが発生し、常に「実行できませんでした」が発生した場合はどうなりRuntimeErrorますか? これはほぼ確実に望ましい動作ではありませんが、テストは引き続きパスします。

于 2013-04-04T16:22:44.193 に答える