Mocks

Mocking within the same module

To indicate that mocked object is in the same module as procedure being tested prepend the name of it with dot.

def increment_input():
    """
    spec:
        title: Incrementation of input
        from unittest.mock import MagicMock
        domain:
            title: Should return 4 when input is 3
            mock .input as MagicMock(return_value='3')
            results 4
    """
    return int(input()) + 1

Mocking external module

Let’s assume you want to reuse procedure defined in previous paragraph. To do that you have to specify absolute path to input. In this case mocked procedure is contained within examples.mocks.mock_input module. Note that you don’t have to import Mock to scope since it is already builtin.

from examples.mocks.mock_input import increment_input
from examples.result_validation.factorial import factorial


def mock_external():
    """
    spec:
        mock examples.mocks.mock_input.input as Mock(return_value=1)
        domain : results 2
        mock examples.mocks.mock_input.input as Mock(return_value=5)
        domain : results 720
    """
    value = increment_input()
    return factorial(value)