1
私はunittestをunittest.mockと一緒に使ってアプリケーションでいくつかのテストをしようとしています。unittest.mockのオブジェクトを二重にする
私はMainClassとCallerという2つのクラスを持っています。二重のCallerでメインクラスをテストしたいと思います。これは私が持っているものに短いです:
私は試験でclass MainClass:
def __init__(self, caller):
self.caller = caller
def some_function(self):
self.caller.function1()
blab = self.caller.function2()
class Caller:
# some functions non of which should be accessed in tests
class CallerMock:
def __init__(self):
self.items = []
def function1(self):
pass
def function2(self):
return items
:
class TestMainFunction(unittest.TestCase):
def setUp(self):
self.mock = MagicMock(wraps=CallerMock())
self.main_class = MainClass(self.mock)
def test(self):
# self.main_class.caller.items = items
# self.mock.items = items
# self.mock.function2.return_value = items
self.main_class.some_functions()
# non of the above change the return value of function2
問題は、コメント行の非は実際に私の関数2の戻り値を変更することであるが。どうすればこれを達成できますか?
私はdoubleを必要とせず、Callerのすべての関数がNoneを返すソリューションに満足しています。そして、特定のテストで関数の戻り値を指定する必要があります。
Mockのすべての機能がMockオブジェクトを返すので、これは解決しません。 run関数が多くの呼び出し側関数を呼び出すように指定する必要があったので、すべての関数のデフォルト戻り値を指定する必要があります – Ela
@Ela次に、使用されているすべての関数に対して 'return_value'を設定できます。 –