I'm trying to create some unitary tests for a method that needs to instantiate some objects using classes from external modules that I don't want to use, as they need arguments that I can't pass at object initialization.
For example, imagine that the code I want to test has the following structure:
from module_one import Class_1 from module_two import Class_2 class MyMainClass() def method_to_be_tested(self, stuff): var_one = Class_1(stuff.data) var_two = Class_2(var_one.data) print("The var is %s" % var_two.attribute)
stuff is a complex argument, with several attributes that I can't mock.
This is what I have tried in my test method, using
unittest.mock (but it didn't work):
@patch('module_two.Class_2') @patch('module_one.Class_1') def test_method(self, mocked_class1, mocked_class2): stuff = mock() mocked_class1.return_value = 'some_stuff' mock_class2 = mock() mock_class2.attribute = 'what_i_want_to_get' mocked_class2 = mock_class2 mymainmodule.method_to_be_tested(stuff)
It seems that the patch or something isn't working, as it throws an error telling me that str object has no attribute data, referring to
var_one.data is used as an argument for
What I want is to pass any argument to
Class2 and get always what I defined in