7
私はnosetestsを使用しています.2つの別々のファイルには2つのテストがあります。個別に実行するとどちらも正常に動作しますが、一緒に実行されると、最初のテストの模擬テストは2番目のテストの結果を混乱させます。テスト機能の終了後、すべてのモック/パッチをリセットして、毎回クリーンなテストを受けるようにするにはどうすればよいですか?Python - テスト中にモックをアンロック/リセットする方法
可能であれば、私のテストを通じて説明することが可能です。私の最初のテストは、次のようになります。
def test_list_all_channel(self):
from notification.models import Channel, list_all_channel_names
channel1 = Mock();
channel2 = Mock();
channel3 = Mock();
channel1.name = "ch1"
channel2.name = "ch2"
channel3.name = "ch3"
channel_list = [channel1, channel2, channel3]
Channel.all = MagicMock()
Channel.all.return_value = channel_list
print Channel
channel_name_list = list_all_channel_names()
self.assertEqual("ch1", channel_name_list[0])
self.assertEqual("ch2", channel_name_list[1])
self.assertEqual("ch3", channel_name_list[2])
そして、私の第二の試験は、次のとおりです。
def test_can_list_all_channels(self):
add_channel_with_name("channel1")
namelist = list_all_channel_names()
self.assertEqual("channel1", namelist[0])
しかしChannel.all(からの戻り値)Iが得るので、まだ `最初の関数からリストに設定されています"ch1"は "channel1"と等しくありません。助言がありますか?大変ありがとう!
p.stop()
これは、あなたのモックがに隔離されていることを確認します:
パッチ外のモック関数についてはどうですか?これを行う唯一の方法は、それらを最初にパッチすることですか? – golmschenk
はい。組み込みのunittestフレームワークを使用することをお勧めします。こうすることで、setUpメソッドとtearDownメソッドを使ってパッチを作成/破棄することができます。 –
こんにちは@jjia6395括弧がないか、あまりにも多くのものがありますか? –