私はワイヤー統合テストスイートにNoseを使用したいと考えています。ただし、これらのテストの実行順序は重要です。単体テスト実行の順番を指定するノーズプラグ
前記、私は私が望む順番でテストを飾るために一緒に迅速なプラグインを投げるだろうと思ったそれは、実行:https://gist.github.com/Redsz/5736166
def Foo(unittest.TestCase):
@step(number=1)
def test_foo(self):
pass
@step(number=2)
def test_boo(self):
pass
を、私が思っていたプラグインに建て見直しから、私は単純にオーバーライドすることができますloadTestsFromTestCase
と装飾された「ステップ番号」:
def loadTestsFromTestCase(self, cls):
"""
Return tests in this test case class. Ordered by the step definitions.
"""
l = loader.TestLoader()
tmp = l.loadTestsFromTestCase(cls)
test_order = []
for test in tmp._tests:
order = test.test._testMethodName
func = getattr(cls, test.test._testMethodName)
if hasattr(func, 'number'):
order = getattr(func, 'number')
test_order.append((test, order))
test_order.sort(key=lambda tup: tup[1])
tmp._tests = (t[0] for t in test_order)
return tmp
この方法は、テストが鼻で実行されているときしかし、彼らはこの順序で実行されていない、私が望む順番でテストを返していることにより、テストを注文します?
おそらく、この注文の概念を別の場所に移す必要がありますか?
更新:私が作ったコメントによれば、プラグインは実際には期待通りに動作しています。私はpycharmテストの記者を信頼すると誤解されました。テストは期待通りに実行されています。私はそれを残すだろうと思った質問を削除するよりもむしろ。 documentationから
さて、この質問は無視できますが、プラグインは期待どおりに動作していると思います。テスト担当者が違う順序でPychamrから実行している間、私は脳のおならを持っていました。しかし、テストは実際には実行中に期待どおりに注文されています。 – Jesse
私はあなたのコードベースを知らないので、あまりにも多くを推測したくないですが、自動化されたテストの経験に基づいて、最良の長期的なソリューションがあなたのテストを彼らはもはやお互いに依存関係を持ちません。セットアップ関数で必要な前提条件を繰り返したり、実際に依存する一連のイベントを繰り返して1つのテストにマージしたりすることを検討することもできます。また、単体テストとしては、一般に機能の個々の「ユニット」をテストし、可能な限り外部IOを避けるべきであることに注意してください。 – GrandOpener