2013-05-03 156 views
6

テストの実行順序を設定する必要があります。他のテストより前に検証されたデータが必要なためです。注文を設定することは可能ですか?Python unittestの実行順序

class OneTestCase(unittest.TestCase): 
    def setUp(self): 
     # something to do 
    def test_login (self): 
     # first test 
     pass 
    def test_other (self): 
     # any order after test_login 
    def test_othermore (self): 
     # any order after test_login 
if __name__ == '__main__': 
    unittest.main() 

おかげ

+3

単体テストは単体であることを意味します。彼らはお互いに依存するはずがありません。 – njzk2

+0

あなたは正しいですが、この種の動作が必要なときにテストを行う最良の方法であり、毎回ログインしてテストを行うと良いでしょうか?それは他の作業を行う前にログインを開始する必要のあるサーバ用で、他の方法はログインに基づいて情報を読み込みます – Carlos

+3

実際に実サーバと通信する場合は、* unit *テストをしていません。 – delnan

答えて

1

ベターそれをしません。

テストは独立している必要があります。

テストで呼び出される関数にコードを入れるのが最善の方法です。

def assert_can_log_in(self): 
    ... 

def test_1(self): 
    self.assert_can_log_in() 
    ... 

def test_2(self): 
    self.assert_can_log_in() 
    ... 

、あるいはテストクラスを分割し、セットアップ機能にアサーションを置くために:そのような

class LoggedInTests(unittest.TestCase): 
    def setUp(self): 
     # test for login or not - your decision 

    def test_1(self): 
     ... 

私はテストが分割されており、私がテストする必要があり、すべての例を通じてよりよい見ることができるので、私は多くの場合、より多くの、より良いテストを書くクラスを分割します。

+0

ログインはテストする必要があります。 – Carlos

+0

申し訳ありませんが、わかりません。 – User

+3

テストを正しく書く方法についての長いディスカッションを読んでいます。事実、いくつかのテストはある特定の状態に依存する。その状態の作成をテストする(例えばログインしている)以前のテストを通じて作成することができる。この状態を作成するには時間がかかります。そのため、テストの継続時間を短く保つために、テストを再利用して連鎖テストを行う価値があります。それ以外の場合は、テストをカバーするためにログオン手順を100回テストすることになり、ログインした状態で行うことになります。だから、テスト分離についてはあまりにも哲学的であることは理にかなっていません。 – Michael

18

あなたはこのようにそれを行うことができます。

class OneTestCase(unittest.TestCase): 
    @classmethod 
    def setUpClass(cls): 
     # something to do 
     pass 

    def test_01_login (self): 
     # first test 
     pass 
    def test_02_other (self): 
     # any order after test_login 
    def test_03_othermore (self): 
     # any order after test_login 

if __name__ == '__main__': 
    unittest.main(failfast=True, exit=False) 

テストはアルファベット順にソートされているので、ちょうどあなたの希望の順序を取得するために数字を追加します。おそらく、テストランナーにfailfast = Trueを設定したいので、最初のテストが失敗すると即座に失敗します。

+3

どこでソートされていますか?それに頼ることはできますか? – User

+2

unittestはアルファベット順で確実にソートします。 – Michael

+0

@ユーザPython docs: "さまざまなテストケースの実行順序は、組み込みの文字列の順序を基準にしてテスト関数名をソートすることによって決まることに注意してください。 – mloskot