This is my note on how to create various mocks. Please let me know if you have trouble creating a mock in your test.
import pytest from unittest.mock import Mock # Create a mock with one attribute. def test_mock_with_one_attribute(): mock = Mock(one_attribute='one') assert "one" == mock.one_attribute # Create a mock with multiple attributes. def test_mock_with_multiple_attributes(): mock = Mock(**{"one_attribute":"one","two_attribute":"two"}) assert "one" == mock.one_attribute assert "two" == mock.two_attribute # Create a mock with name attribute. As name is an argument of Mock, # we need to speficy it after create mock object. def test_mock_name_attribute(): mock = Mock() mock.name = "ken" assert "ken" == mock.name # Set return value when the mock itself is called as function. def test_mock_as_function(): mock = Mock(return_value='result') assert "result" == mock() # Create a mock with one method. def test_mock_with_one_method(): mock = Mock(**{"my_method.return_value":"result"}) assert "result" == mock.my_method() # Create a mock with several methods and attributes at once. def test_mock_with_methods_and_attributes(): mock = Mock(**{"my_method.return_value":"result_my", "another_method.return_value":"result_another", "one_attribute":"one", "two_attribute":"two"}) assert "result_my" == mock.my_method() assert "result_another" == mock.another_method() assert "one" == mock.one_attribute assert "two" == mock.two_attribute # Create a method that returns Exception. def test_mock_with_side_effect_exception(): mock = Mock(side_effect=Exception("dummy")) with pytest.raises(Exception) as e: mock() assert "dummy" == str(e.value) # Create a mock and inner mock as it's attribute def test_mock_with_innter_mock_multiple_attributes(): mock = Mock(data = Mock(**{"one_attribute":"one","two_attribute":"two"})) assert "one" == mock.data.one_attribute assert "two" == mock.data.two_attribute
Top comments (0)