2017-02-20 10 views
1

以下のアイデアがunittestでの使用に安全かどうかを知りたいと思います。私が持っている問題は、まったく同じテストセットを実行したいが、わずかに異なるセットアップ作業で実行したいということです。スードコードは次のとおりです。ユニークな変数のためのPythonでのunittestのサブクラスの使用

def reusableTest(var1): 
    # do base test 

class Suite_Finds_Type1(unittest.TestCase, myFinds): 
    @classmethod 
    def setUpClass (self): 
     self.somevar = 'method1' 

class Suite_Finds_Type2(unittest.TestCase, myFinds): 
    @classmethod 
    def setUpClass (self): 
     self.somevar = 'method2' 

class myFinds(): 
    def test_001(self): 
     reusableTest(self.somevar) 

    def test_002(self): 
     reusableTest(self.somevar) 

if __name__=='__main__': 
    unittest.main(argv=sys.argv, testRunner = unittest.TextTestRunner(verbosity=2)) 
+0

この非常にメソッドが機能することがわかりました。より良い予想。 – Keith

答えて

0

いいえ、これは実際には機能しません。あなたがテストスイートにsetUpClassを定義したので、それは実行されるものであり、myFindsのものは無視されます。

ところで、setUpClassはクラスメソッドである必要があります。

この問題を解決する1つの方法は、単純な継承階層を使用すると、あなたの子クラスのクラス変数としてsomevarを定義することです:

class myFinds(unittest.TestCase): 
    @classmethod 
    def setUpClass(cls): 
     # ... 
     pass 

class Suite_Finds_Type1(myFinds): 
    somevar = 'method1' 
+0

- 恐ろしいですが、今日このファイルの変換を完了して、少し前に物事を移動します。私はクラスメソッドのデコレータについて知っていました(元のコードを編集しようとします)が、私のサンプルコードでは忘れました。 Ty ...はそうでなければ動作し、再利用可能なテストのコレクションを作成しても問題ありません。 – Keith

0

あなたは、Python 3.4以降を使用している場合は、subtestsの使用を検討してください。サブテストは、テストをパラメータ化するためのメカニズムを提供します。

はあなたのコードについては、次のようなものを考えることができます:

def reusableTest(var1): 
    # do base test 

class Suite_Finds(unittest.TestCase): 
    def test_methods(var1): 
     for method in ('method1', 'method2'): 
      with self.subTest(method = method): 
       reusableTest(method) 

サブテストでは、別のテストとして、各報告書、しかし、あなたがテストコードを再利用することができます。

+0

OKを実行します...残念ながら、まだPython 2.7 – Keith

関連する問題