質問: {1}".format(name, name) exec(str_monkey_patch) unittest.main() ``` 泥臭いながらunittestは想定通り動き、パスしました。 ``` #実行結果 ........... ---------------------------------------------------------------------- Ran 11 tests in 0.000s OK ```
回答: やりたいことは恐らく "データ駆動テスト" (Data-Driven Testing) が該当すると思います。 テスト内容が同じような処理であれば、テストケースを増やす必要はなく、 テストするデータのみを増やせばいいので、簡単なものであれば 繰り返し文の中で assert するだけです。 ``` def generateTestData(): # ここで assert に渡す引数をデータ元から生成します。 # ジェネレータにすると便利です。 yield 1+1, 2, "add" yield 1-1, 0, "sub" yield 1*1, 1, "mul" for first, second, msg in generateTestData(): self.assertEquals(first, second, msg) ``` 注意点は、失敗した時にどのデータセットで失敗したのかログから分かるように、第三引数をセットします。 同じデータを元に複数のテストにかける場合は、setUp 内で生成する等、工夫してください。 動的に生成する方法は、特に exec(文字列) はお勧めしません。 エラーで行番号等を報告されても、ソースは動的に生成した文字の中、 手間がかかりデバッグが困難になります。