2017-01-07 2 views
-1

は、私は以下のように次のコードを書いたアクセスが

#test.py 

import sys 
import unittest 
from base import * 

class demo_script(BaseClass): 
    def setUp(self): 
    self.flag = False 
    self.abc = None 
    super(demo_script, self).setUp() 

    def test_before(self): 
    self.abc = 5 
    ## reboot occurs here and system context is saved 

    def test_after(self): 
    if self.abc == 5: 
     print"Pass" 
    else: 
     print"fail" 

    def tearDown(self): 
    print"clean" 

そのままテストが失敗しています変数self.abcにアクセスできません。 ローカル変数はtest_before()とtest_after()の両方のテストでどのようにアクセスできますか?

+0

問題のコードが間違ってインデントされています。 test_ *メソッドとtearDownメソッドは、同じsetUpになるように字下げする必要があります。 – snakecharmerb

+0

@warvariucあなたのコードの書式設定を元に戻すべきです - OPの問題はインデントが間違っていることが原因です。質問のコードが実際のコードと一致しない場合は、再フォーマットを行う必要があります。 – snakecharmerb

+0

あなたのコードは正しくインデントされていますか?つまり、 'test_before'、' test_after'、 'tearDown'はクラス定義の下にインデントされていますか?もしそうでなければ、 'self'はこれらのメソッドでは未定義です。 – snakecharmerb

答えて

0

Noseなどのテストランナーは、テストメソッドの実行順序を保証しません。したがって、test_beforeself.abcを設定すると、test_beforeの後にtest_afterが実行されることがわかりません。

とにかく、setUpで定義されている以外のテスト方法間で状態を共有することは悪い考えです。テストは分離する必要があります。

したがって、テストメソッドを1つにマージします。