2017-10-18 15 views
0

モジュールレベルのデータ(JSONファイル)に依存するプログラムの単体テストを作成しようとしています。
setUpClassクラスメソッドを使用してテストJSONファイルを設定し、テストが実行された後にそれを破棄すると考えていました。
問題は、モジュールレベルのJSONをセットアップしても、テストしようとしているプログラムの他の関数で必要とされる値が返されることです。
は、ここで私が何を意味するかの例です:unittestのsetUpClassクラスメソッドは、他のテストで使用する値を返しますか?

import unittest 
import myProg 

class TestProg(unittest.TestCase): 
    @classmethod 
    def setUpClass(cls): 
     # initialize() creates the JSON file 
     myProg.initialize() 
     f = myProg.initialize_storage() 
     return f 

    def test_prog_func(self): 
     myProg.prog_func("test_key", "test_value", f) 

fは私の関数の残りの部分で必要とされる項目です。 このコードは機能しません。私は、 "return f"をテスト全体を通じて使用されるsetUpClassから許可する方法を探しています。

+2

setUpClassメソッドの最初の引数 'cls'はクラス変数です。それを保存します。 'cls.f = f' –

答えて

3

何も返すことはできません。いいえ、戻り値は無視されます。 (結局、それは方法が発見されている方法です)

インスタンスの属性検索もクラス属性を見つけるためだ
class TestProg(unittest.TestCase): 
    @classmethod 
    def setUpClass(cls): 
     # initialize() creates the JSON file 
     myProg.initialize() 
     cls.f = myProg.initialize_storage() # set a class attribute 

    def test_prog_func(self): 
     # self.f here will find the class attribute 
     myProg.prog_func("test_key", "test_value", self.f) 

は:あなたはクラスは、すべてのテストに使用可能なを、属性を設定することができます。

テストランナーは、実行するテストごとにクラスの新しいインスタンスを作成します。インスタンス状態がきれいであることを保証します。クラスの状態はクリアされないので、のクラス属性に変更すると、適切なテスト分離がなくなります。

関連する問題