Python 2.7 の新しい検出機能を使用すると、奇妙なエラーが発生します。少し余分なセットアップとファイルからのメンバーデータを必要とするいくつかの単体テストがあります。に渡される現在のテスト スイートにセットアップ テスト ケースを追加しようとしていますload_tests()
。しかし、テスト スイートtests
には既に標準テスト (現在のモジュール内のオブジェクトを含むTestCase
) が含まれているため、自動的に追加されたテストケースの適切なセットアップが行われず、AttributeError が発生します。
以下のコードでは、load_tests()
を使用して、csv ファイルの各データ行に対して 1 つのテスト ケースを作成しています。ファイルには 3 行ありますが、何らかの理由で 4 番目のテストケースが作成されています。
#!/usr/bin/python
import unittest
class Foo(unittest.TestCase):
def setup(self,bar):
print "Foo.setup()"
self.bar = bar
def runTest(self):
print self.bar
def load_tests(loader, tests, pattern):
f = open('data.csv') # data.csv contains three lines: "a\nb\nc"
for line in f:
tc = Foo()
tc.setup(line)
tests.addTest(tc)
return tests
unittest.main()
このコードを実行すると、4 つのテストが実行され、そのうちの 1 つが失敗したことが出力に示されます。データ ファイルには 3 行しか含まれてFoo.setup()
おらず、3 回しか呼び出されていません。そのload_tests()
ため、設計どおりに 3 つのテスト ケースを作成しました。
Foo.setup()
Foo.setup()
Foo.setup()
Ea
.b
.c
.
======================================================================
ERROR: runTest (__main__.Foo)
----------------------------------------------------------------------
Traceback (most recent call last):
File "./foo.py", line 11, in runTest
print self.bar
AttributeError: 'Foo' object has no attribute 'bar'
----------------------------------------------------------------------
Ran 4 tests in 0.002s
スイートに自動的にロードされた TestCase を削除する方法はありますか? 既に存在する他のすべてのテストが必要なため、新しい空の TestSuite を作成できません。これらのテストをスイートに追加したいだけです。
編集:私の質問とコード例を明確にしました。以前は少し曖昧でした。