def test_can_expect_call_without_specifying_arguments_with_the_same_syntax_that_it_will_be_called_with(mocks): to_save = "Let's go!" return_value = "Yippee!" database = mocks.mock() expects(database).save.returns(return_value) assert database.save(to_save) is return_value assert_raises(UnexpectedInvocationError, lambda: database.save(to_save))
def test_using_allows_in_a_sequence_allows_it_to_be_called_no_times(mocks): file = mocks.mock() ordering = mocks.sequence() allows(file).write.in_sequence(ordering) expects(file).close().in_sequence(ordering) file.close()
def test_expected_methods_cannot_be_called_more_than_once(mocks): mock = mocks.mock() expects(mock).save.returns("Oh my!") mock.save("positional", key="word") assert_raises(UnexpectedInvocationError, lambda: mock.save("positional", key="word"))
def test_function(mocks): file = mocks.mock(name="file") ordering = mocks.sequence() expects(file).write("Private investigations").in_sequence(ordering) expects(file).close().in_sequence(ordering) file.close() file.write("Private investigations")
def test_method_expectations_are_used_in_the_order_they_are_defined(mocks): first = "One is the loneliest number" second = "Two can be as bad as one" mock = mocks.mock() expects(mock).save.returns(first) expects(mock).save.returns(second) assert mock.save() is first assert mock.save() is second
def test_calling_allowed_call_in_wrong_place_raises_assertion_error(mocks): file = mocks.mock() ordering = mocks.sequence() allows(file).write.in_sequence(ordering) expects(file).close().in_sequence(ordering) file.close() assert_raises_str(AssertionError, 'Invocation out of order. Expected no more calls in sequence, but got unnamed.write.', lambda: file.write("Bar"))
def test_can_use_matchers_instead_of_values_for_keyword_arguments(mocks): return_value = "Whoopee!" mock = mocks.mock() expects(mock).save.with_args(value=equal_to("Blah")).returns(return_value) assert_raises(UnexpectedInvocationError, lambda: mock.save()) assert_raises(UnexpectedInvocationError, lambda: mock.save(key="word")) assert_raises(UnexpectedInvocationError, lambda: mock.save("positional")) assert_raises(UnexpectedInvocationError, lambda: mock.save("positional", key="word")) assert mock.save(value="Blah") is return_value
def test_expected_methods_can_be_called_in_any_order(mocks): return_no_args = "Alone!" return_positional = "One is the loneliest number" mock = mocks.mock() expects(mock).save.with_args().returns(return_no_args) expects(mock).save.with_args("positional").returns(return_positional) assert mock.save("positional") is return_positional assert mock.save() is return_no_args assert_raises(UnexpectedInvocationError, lambda: mock.save("positional")) assert_raises(UnexpectedInvocationError, lambda: mock.save())
def test_can_use_matchers_instead_of_values_for_keyword_arguments(mocks): class BlahMatcher(Matcher): def matches(self, other, failure_output): return other == "Blah" return_value = "Whoopee!" mock = mocks.mock() expects(mock).save.with_args(value=BlahMatcher()).returns(return_value) assert_raises(UnexpectedInvocationError, lambda: mock.save()) assert_raises(UnexpectedInvocationError, lambda: mock.save(key="word")) assert_raises(UnexpectedInvocationError, lambda: mock.save("positional")) assert_raises(UnexpectedInvocationError, lambda: mock.save("positional", key="word")) assert mock.save(value="Blah") is return_value
def test_can_mock_methods_used_internally_by_mock(mocks): mock = mocks.mock() expects(mock)._mocked_calls expects(mock).save() allows(mock)._mocked_calls allows(mock).save() expects_call(mock) allows_call(mock) mock._mocked_calls() mock.save() mock() class UserRepository(object): def _base(self): pass based_mock = mocks.mock(UserRepository) allows(based_mock)._base
def test_sequences_do_not_raise_assertions_when_called_in_correct_order(mocks): log = mocks.mock() first_ordering = mocks.sequence() second_ordering = mocks.sequence() expects(log).write("You and your friend").in_sequence(first_ordering) expects(log).write("Love Over Gold").in_sequence(second_ordering) expects(log).close().in_sequence(first_ordering).in_sequence(second_ordering) allows(log).flush() log.flush() log.write("Love Over Gold") log.flush() log.write("You and your friend") log.flush() log.close()
def test_can_read_multiple_rules_separated_by_newlines(context): rule_set = context.mock(RuleSet) expects(rule_set).add(NonTerminal("SENTENCE"), "I hate you!") expects(rule_set).add(NonTerminal("SENTENCE"), "You smell!") parse("$SENTENCE -> I hate you!\n$SENTENCE -> You smell!", rule_set, [])
def test_whitespace_is_trimmed_from_right(context): rule_set = context.mock(RuleSet) expects(rule_set).add(NonTerminal("SENTENCE"), "I hate you!") parse("$SENTENCE -> I hate you! \t\t", rule_set, [])
def test_final_terminal_is_only_trimmed_on_the_right(context): rule_set = context.mock(RuleSet) expects(rule_set).add(NonTerminal("VERY"), NonTerminal("VERY"), " very") parse("$VERY -> $VERY very", rule_set, [])
def test_empty_terminals_are_not_produced_by_rules(context): rule_set = context.mock(RuleSet) expects(rule_set).add(NonTerminal("SENTENCE"), NonTerminal("INSULT")) parse("$SENTENCE -> $INSULT", rule_set, [])
def function(mocks): mock = mocks.mock() expects(mock).save
def function(mocks): mock = mocks.mock() expects(mock).save.with_args("positional", key="word")
def test_mocks_can_raise_exceptions(mocks): mock = mocks.mock() expects(mock).save.raises(RuntimeError("Oh noes!")) assert_raises(RuntimeError, lambda: mock.save("anything"))
def test_ignores_blank_lines(context): rule_set = context.mock(RuleSet) expects(rule_set).add(NonTerminal("SENTENCE"), "I hate you!") expects(rule_set).add(NonTerminal("SENTENCE"), "You smell!") parse("\n \t\n\n$SENTENCE -> I hate you!\n \n\n$SENTENCE -> You smell!\n\n\n", rule_set, [])
def test_can_read_rule_for_terminal_to_non_terminal(context): rule_set = context.mock(RuleSet) expects(rule_set).add(NonTerminal("SENTENCE"), "I hate you!") parse("$SENTENCE -> I hate you!", rule_set, [])
def test_can_read_non_terminals_on_right(context): rule_set = context.mock(RuleSet) expects(rule_set).add(NonTerminal("SENTENCE"), "You're as ", NonTerminal("ADJ"), " as a ", NonTerminal("ANIMAL")) parse("$SENTENCE -> You're as $ADJ as a $ANIMAL", rule_set, [])
def test_expected_methods_can_be_called_once_with_any_arguments_if_no_arguments_specified(mocks): return_value = "Oh my!" mock = mocks.mock() expects(mock).save.returns(return_value) assert mock.save("positional", key="word") is return_value
def test_can_use_braces_to_indicate_non_terminals(context): rule_set = context.mock(RuleSet) expects(rule_set).add(NonTerminal("SENTENCE"), "You're ", NonTerminal("RUDE_ADJ"), "er than I thought") parse("$SENTENCE -> You're ${RUDE_ADJ}er than I thought", rule_set, [])
def test_non_terminals_are_alphanumeric_and_underscores_only(context): rule_set = context.mock(RuleSet) expects(rule_set).add(NonTerminal("SENTENCE"), "You smell of ", NonTerminal("Smell2"), ".") parse("$SENTENCE -> You smell of $Smell2.", rule_set, [])