Exemple #1
0
    def test_calls_are_chainable(self):
        subject = InstanceDouble('doubles.testing.User')

        expect(subject).instance_method.at_most(1).times.at_most(2).times

        subject.instance_method()
        subject.instance_method()
Exemple #2
0
    def test_passes_when_called_exactly_at_least_times(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.at_least(1).times

        subject.instance_method()
        subject.instance_method()
Exemple #3
0
    def test_calls_are_chainable(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.exactly(1).time.exactly(2).times

        subject.instance_method()
        subject.instance_method()
Exemple #4
0
    def test_calls_are_chainable(self):
        subject = InstanceDouble('doubles.testing.User')

        expect(subject).instance_method.at_most(1).times.at_most(2).times

        subject.instance_method()
        subject.instance_method()
Exemple #5
0
    def test_passes_when_called_twice(self):
        subject = InstanceDouble('doubles.testing.User')

        expect(subject).instance_method.twice()

        subject.instance_method()
        subject.instance_method()
Exemple #6
0
class TestAsync(object):
    def setup(self):
        self.subject = InstanceDouble('doubles.testing.User')

    def test_and_return_future(self):
        allow(self.subject).instance_method.and_return_future('Bob Barker')

        result = self.subject.instance_method()
        assert result.result() == 'Bob Barker'

    def test_and_return_future_multiple_values(self):
        allow(self.subject).instance_method.and_return_future(
            'Bob Barker', 'Drew Carey')

        result1 = self.subject.instance_method()
        result2 = self.subject.instance_method()
        assert result1.result() == 'Bob Barker'
        assert result2.result() == 'Drew Carey'

    def test_and_raise_future(self):
        exception = Exception('Bob Barker')
        allow(self.subject).instance_method.and_raise_future(exception)

        result = self.subject.instance_method()
        with raises(Exception) as e:
            result.result()

        assert e.value == exception
Exemple #7
0
class TestAsync(object):
    def setup(self):
        self.subject = InstanceDouble('doubles.testing.User')

    def test_and_return_future(self):
        allow(self.subject).instance_method.and_return_future('Bob Barker')

        result = self.subject.instance_method()
        assert result.result() == 'Bob Barker'

    def test_and_return_future_multiple_values(self):
        allow(self.subject).instance_method.and_return_future('Bob Barker', 'Drew Carey')

        result1 = self.subject.instance_method()
        result2 = self.subject.instance_method()
        assert result1.result() == 'Bob Barker'
        assert result2.result() == 'Drew Carey'

    def test_and_raise_future(self):
        exception = Exception('Bob Barker')
        allow(self.subject).instance_method.and_raise_future(exception)

        result = self.subject.instance_method()
        with raises(Exception) as e:
            result.result()

        assert e.value == exception
Exemple #8
0
    def test_skip_builtin_verification_does_not_affect_non_builtins(self):
        with no_builtin_verification():
            subject = InstanceDouble('doubles.testing.User')
            allow(subject).instance_method

            with raises(VerifyingDoubleArgumentError):
                subject.instance_method('bar')
Exemple #9
0
    def test_passes_when_called_exactly_at_least_times(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.at_least(1).times

        subject.instance_method()
        subject.instance_method()
Exemple #10
0
    def test_raises_provided_exception(self, stubber):
        subject = InstanceDouble('doubles.testing.User')

        stubber(subject).instance_method.and_raise(UserDefinedException)

        with raises(UserDefinedException):
            subject.instance_method()
Exemple #11
0
    def test_skip_builtin_verification_does_not_affect_non_builtins(self):
        with no_builtin_verification():
            subject = InstanceDouble('doubles.testing.User')
            allow(subject).instance_method

            with raises(VerifyingDoubleArgumentError):
                subject.instance_method('bar')
Exemple #12
0
    def test_raises_provided_exception(self, stubber):
        subject = InstanceDouble('doubles.testing.User')

        stubber(subject).instance_method.and_raise(UserDefinedException)

        with raises(UserDefinedException):
            subject.instance_method()
Exemple #13
0
    def test_passes_when_called_more_than_at_least_times(self):
        subject = InstanceDouble('doubles.testing.User')

        expect(subject).instance_method.at_least(1).times

        subject.instance_method()
        subject.instance_method()
Exemple #14
0
    def test_passes_when_called_twice(self):
        subject = InstanceDouble('doubles.testing.User')

        expect(subject).instance_method.twice()

        subject.instance_method()
        subject.instance_method()
Exemple #15
0
    def test_passes_when_called_more_than_at_least_times(self):
        subject = InstanceDouble('doubles.testing.User')

        expect(subject).instance_method.at_least(1).times

        subject.instance_method()
        subject.instance_method()
Exemple #16
0
    def test_calls_are_chainable(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.exactly(1).time.exactly(2).times

        subject.instance_method()
        subject.instance_method()
Exemple #17
0
    def test_raises_provided_exception_with_complex_signature(self, stubber):
        subject = InstanceDouble('doubles.testing.User')

        stubber(subject).instance_method.and_raise(
            UserDefinedExceptionWithArgs, 'msg', 'arg1', arg2='arg2')

        with raises(UserDefinedExceptionWithArgs):
            subject.instance_method()
Exemple #18
0
    def test_returns_the_last_specified_value_multiple_times(self, stubber):
        subject = InstanceDouble('doubles.testing.User')

        stubber(subject).instance_method.and_return('bar', 'bazz')

        assert subject.instance_method() == 'bar'
        assert subject.instance_method() == 'bazz'
        assert subject.instance_method() == 'bazz'
Exemple #19
0
    def test_returns_the_last_specified_value_multiple_times(self, stubber):
        subject = InstanceDouble('doubles.testing.User')

        stubber(subject).instance_method.and_return('bar', 'bazz')

        assert subject.instance_method() == 'bar'
        assert subject.instance_method() == 'bazz'
        assert subject.instance_method() == 'bazz'
Exemple #20
0
    def test_raises_provided_exception_with_complex_signature(self, stubber):
        subject = InstanceDouble('doubles.testing.User')

        stubber(subject).instance_method.and_raise(
            UserDefinedExceptionWithArgs('msg', 'arg1', arg2='arg2'),
        )

        with raises(UserDefinedExceptionWithArgs):
            subject.instance_method()
Exemple #21
0
    def test_called_with_zero(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.exactly(0).times

        with raises(MockExpectationError) as e:
            subject.instance_method()
        teardown()

        assert re.match(
            r"Allowed 'instance_method' to be called 0 times instead of 1 "
            r"time on <InstanceDouble of <class 'doubles.testing.User'> "
            r"object at .+> with any args, but was not."
            r" \(.*doubles/test/allow_test.py:\d+\)", str(e.value))
Exemple #22
0
    def test_raises_if_called_with_args(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.with_no_args()

        with raises(UnallowedMethodCallError) as e:
            subject.instance_method('bar')

        assert re.match(
            r"Received unexpected call to 'instance_method' on "
            r"<InstanceDouble of <class '?doubles.testing.User'?"
            r"(?: at 0x[0-9a-f]{9})?> object at .+>\."
            r"  The supplied arguments \('bar'\)"
            r" do not match any available allowances.", str(e.value))
Exemple #23
0
    def test_fails_when_called_more_than_at_most_times(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.at_most(1).times

        subject.instance_method()
        with raises(MockExpectationError) as e:
            subject.instance_method()
        teardown()

        assert re.match(
            r"Allowed 'instance_method' to be called at most 1 time instead of 2 times on "
            r"<InstanceDouble of <class 'doubles.testing.User'> object at .+> "
            r"with any args, but was not."
            r" \(.*doubles/test/allow_test.py:\d+\)", str(e.value))
Exemple #24
0
    def test_fails_when_called_less_than_at_least_times(self):
        subject = InstanceDouble('doubles.testing.User')

        expect(subject).instance_method.at_least(2).times

        subject.instance_method()
        with raises(MockExpectationError) as e:
            verify()
        teardown()

        assert re.match(
            r"Expected 'instance_method' to be called at least 2 times instead of 1 time on "
            r"<InstanceDouble of <class 'doubles.testing.User'> object at .+> "
            r"with any args, but was not."
            r" \(.*doubles/test/expect_test.py:\d+\)", str(e.value))
Exemple #25
0
    def test_fails_when_called_once_times(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.never()

        with raises(MockExpectationError) as e:
            subject.instance_method()
        teardown()

        assert re.match(
            r"Allowed 'instance_method' to be called 0 times instead of 1 "
            r"time on <InstanceDouble of <class 'doubles.testing.User'> "
            r"object at .+> with any args, but was not."
            r" \(.*doubles/test/allow_test.py:\d+\)",
            str(e.value)
        )
Exemple #26
0
    def test_raises_if_called_with_args(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.with_no_args()

        with raises(UnallowedMethodCallError) as e:
            subject.instance_method('bar')

        assert re.match(
            r"Received unexpected call to 'instance_method' on "
            r"<InstanceDouble of <class '?doubles.testing.User'?"
            r"(?: at 0x[0-9a-f]{9})?> object at .+>\."
            r"  The supplied arguments \('bar'\)"
            r" do not match any available allowances.",
            str(e.value)
        )
Exemple #27
0
    def test_called_with_zero(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.exactly(0).times

        with raises(MockExpectationError) as e:
            subject.instance_method()
        teardown()

        assert re.match(
            r"Allowed 'instance_method' to be called 0 times but was called 1 "
            r"time on <InstanceDouble of <class 'doubles.testing.User'> "
            r"object at .+> with any args, but was not."
            r" \(.*doubles/test/allow_test.py:\d+\)",
            str(e.value)
        )
Exemple #28
0
    def test_subsequent_allowances_override_previous_ones(self, stubber):
        subject = InstanceDouble('doubles.testing.User')

        stubber(subject).instance_method.never().and_return('bar')
        stubber(subject).instance_method.and_return('baz')

        assert subject.instance_method() == 'baz'
Exemple #29
0
    def test_returns_specified_values_in_order(self, stubber):
        subject = InstanceDouble('doubles.testing.User')

        stubber(subject).instance_method.and_return('bar', 'bazz')

        assert subject.instance_method() == 'bar'
        assert subject.instance_method() == 'bazz'
Exemple #30
0
    def test_subsequent_allowances_override_previous_ones(self, stubber):
        subject = InstanceDouble('doubles.testing.User')

        stubber(subject).instance_method.never().and_return('bar')
        stubber(subject).instance_method.and_return('baz')

        assert subject.instance_method() == 'baz'
Exemple #31
0
    def test_returns_specified_values_in_order(self, stubber):
        subject = InstanceDouble('doubles.testing.User')

        stubber(subject).instance_method.and_return('bar', 'bazz')

        assert subject.instance_method() == 'bar'
        assert subject.instance_method() == 'bazz'
Exemple #32
0
    def test_takes_precendence_over_previous_allowance(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.and_return('foo')
        expect(subject).instance_method

        assert subject.instance_method() is None
Exemple #33
0
    def test_takes_precendence_over_previous_allowance(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.and_return('foo')
        expect(subject).instance_method

        assert subject.instance_method() is None
Exemple #34
0
    def test_fails_when_called_more_than_expected_times(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.exactly(1).times

        subject.instance_method()
        with raises(MockExpectationError) as e:
            subject.instance_method()
        teardown()

        assert re.match(
            r"Allowed 'instance_method' to be called 1 time but was called 2 times on "
            r"<InstanceDouble of <class 'doubles.testing.User'> object at .+> "
            r"with any args, but was not."
            r" \(.*doubles/test/allow_test.py:\d+\)",
            str(e.value)
        )
Exemple #35
0
    def test_fails_when_called_more_than_at_most_times(self):
        subject = InstanceDouble('doubles.testing.User')

        expect(subject).instance_method.at_most(1).times

        subject.instance_method()
        with raises(MockExpectationError) as e:
            subject.instance_method()
        teardown()

        assert re.match(
            r"Expected 'instance_method' to be called at most 1 time instead of 2 times on "
            r"<InstanceDouble of <class 'doubles.testing.User'> object at .+> "
            r"with any args, but was not."
            r" \(.*doubles/test/expect_test.py:\d+\)",
            str(e.value)
        )
Exemple #36
0
    def test_fails_when_called_once(self):
        subject = InstanceDouble('doubles.testing.User')

        expect(subject).instance_method.twice()

        subject.instance_method()
        with raises(MockExpectationError) as e:
            verify()
        teardown()

        assert re.match(
            r"Expected 'instance_method' to be called 2 times instead of 1 time on "
            r"<InstanceDouble of <class 'doubles.testing.User'> object at .+> "
            r"with any args, but was not."
            r" \(.*doubles/test/expect_test.py:\d+\)",
            str(e.value)
        )
Exemple #37
0
    def test_chaining_result_methods_gives_the_last_one_precedence(self, stubber):
        subject = InstanceDouble('doubles.testing.User')

        stubber(subject).instance_method.and_return('bar').and_return_result_of(
            lambda: 'baz'
        ).and_raise(UserDefinedException).and_return('final')

        assert subject.instance_method() == 'final'
Exemple #38
0
    def test_chaining_result_methods_gives_the_last_one_precedence(
            self, stubber):
        subject = InstanceDouble('doubles.testing.User')

        stubber(subject).instance_method.and_return(
            'bar').and_return_result_of(lambda: 'baz').and_raise(
                UserDefinedException).and_return('final')

        assert subject.instance_method() == 'final'
Exemple #39
0
    def test_passes_when_called_less_than_at_most_times(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.at_most(2).times

        subject.instance_method()
Exemple #40
0
    def test_passes_if_an_expected_method_call_is_made(self):
        subject = InstanceDouble('doubles.testing.User')

        expect(subject).instance_method

        subject.instance_method()
Exemple #41
0
    def test_passes_when_called_once(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.once()

        subject.instance_method()
Exemple #42
0
    def test_raises_if_called_with_args_that_do_not_match_signature(self):
        subject = InstanceDouble('doubles.testing.User')
        allow(subject).instance_method

        with raises(VerifyingDoubleArgumentError):
            subject.instance_method('bar')
Exemple #43
0
    def test_passes_when_called_exactly_expected_times(self):
        subject = InstanceDouble('doubles.testing.User')

        expect(subject).instance_method.exactly(1).times

        subject.instance_method()
Exemple #44
0
    def test_chains_with_return_values(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.with_no_args().and_return('bar')

        assert subject.instance_method() == 'bar'
Exemple #45
0
    def test_chains_with_return_values(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.with_no_args().and_return('bar')

        assert subject.instance_method() == 'bar'
Exemple #46
0
    def test_allows_method_calls_on_doubles(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method

        assert subject.instance_method() is None
Exemple #47
0
    def test_returns_result_of_a_callable(self, stubber):
        subject = InstanceDouble('doubles.testing.User')

        stubber(subject).instance_method.and_return_result_of(lambda: 'bar')

        assert subject.instance_method() == 'bar'
Exemple #48
0
    def test_raises_if_called_with_args_that_do_not_match_signature(self):
        subject = InstanceDouble('doubles.testing.User')
        allow(subject).instance_method

        with raises(VerifyingDoubleArgumentError):
            subject.instance_method('bar')
Exemple #49
0
    def test_returns_result_of_a_callable(self, stubber):
        subject = InstanceDouble('doubles.testing.User')

        stubber(subject).instance_method.and_return_result_of(lambda: 'bar')

        assert subject.instance_method() == 'bar'
Exemple #50
0
    def test_passes_when_called_once(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.once()

        subject.instance_method()
Exemple #51
0
    def test_allows_method_calls_on_doubles(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method

        assert subject.instance_method() is None
Exemple #52
0
class TestCustomMatcher(object):
    def setup(self):
        self.subject = InstanceDouble('doubles.testing.User')

    def test_matcher_raises_an_exception(self):
        def func():
            raise Exception('Bob Barker')

        allow(self.subject).instance_method.with_args_validator(func)
        with raises(UnallowedMethodCallError):
            self.subject.instance_method()

    def test_matcher_with_no_args_returns_true(self):
        allow(self.subject).instance_method.with_args_validator(lambda: True).and_return('Bob')
        self.subject.instance_method() == 'Bob'

    def test_matcher_with_no_args_returns_false(self):
        allow(self.subject).instance_method.with_args_validator(lambda: False)
        with raises(UnallowedMethodCallError):
            self.subject.instance_method()

    def test_matcher_with_positional_args_returns_true(self):
        (allow(self.subject)
            .method_with_positional_arguments
            .with_args_validator(lambda x: True)
            .and_return('Bob'))
        self.subject.method_with_positional_arguments('Bob Barker') == 'Bob'

    def test_matcher_with_positional_args_returns_false(self):
        allow(self.subject).method_with_positional_arguments.with_args_validator(lambda x: False)
        with raises(UnallowedMethodCallError):
            self.subject.method_with_positional_arguments('Bob Barker')

    def test_matcher_with_kwargs_args_returns_false(self):
        def func(bar=None):
            return False
        allow(self.subject).instance_method.with_args_validator(func)
        with raises(UnallowedMethodCallError):
            self.subject.instance_method()

    def test_matcher_with_kwargs_args_returns_true(self):
        def func(bar=None):
            return True
        allow(self.subject).instance_method.with_args_validator(func).and_return('Bob')
        self.subject.instance_method() == 'Bob'

    def test_matcher_with_positional_and_kwargs_returns_true(self):
        def func(foo, bar=None):
            return True
        allow(self.subject).method_with_default_args.with_args_validator(func).and_return('Bob')
        self.subject.method_with_default_args('bob', bar='Barker') == 'Bob'

    def test_matcher_with_positional_and_kwargs_returns_false(self):
        def func(foo, bar=None):
            return False
        allow(self.subject).method_with_default_args.with_args_validator(func).and_return('Bob')
        with raises(UnallowedMethodCallError):
            self.subject.method_with_default_args('bob', bar='Barker')

    def test_matcher_returns_true_but_args_do_not_match_call_signature(self):
        allow(self.subject).instance_method.with_args_validator(lambda x: True)
        with raises(VerifyingDoubleArgumentError):
            self.subject.instance_method('bob')
Exemple #53
0
    def test_passes_when_called_exactly_expected_times(self):
        subject = InstanceDouble('doubles.testing.User')

        expect(subject).instance_method.exactly(1).times

        subject.instance_method()
Exemple #54
0
class TestCustomMatcher(object):
    def setup(self):
        self.subject = InstanceDouble('doubles.testing.User')

    def test_matcher_raises_an_exception(self):
        def func():
            raise Exception('Bob Barker')

        allow(self.subject).instance_method.with_args_validator(func)
        with raises(UnallowedMethodCallError):
            self.subject.instance_method()

    def test_matcher_with_no_args_returns_true(self):
        allow(self.subject).instance_method.with_args_validator(
            lambda: True).and_return('Bob')
        self.subject.instance_method() == 'Bob'

    def test_matcher_with_no_args_returns_false(self):
        allow(self.subject).instance_method.with_args_validator(lambda: False)
        with raises(UnallowedMethodCallError):
            self.subject.instance_method()

    def test_matcher_with_positional_args_returns_true(self):
        (allow(
            self.subject).method_with_positional_arguments.with_args_validator(
                lambda x: True).and_return('Bob'))
        self.subject.method_with_positional_arguments('Bob Barker') == 'Bob'

    def test_matcher_with_positional_args_returns_false(self):
        allow(
            self.subject).method_with_positional_arguments.with_args_validator(
                lambda x: False)
        with raises(UnallowedMethodCallError):
            self.subject.method_with_positional_arguments('Bob Barker')

    def test_matcher_with_kwargs_args_returns_false(self):
        def func(bar=None):
            return False

        allow(self.subject).instance_method.with_args_validator(func)
        with raises(UnallowedMethodCallError):
            self.subject.instance_method()

    def test_matcher_with_kwargs_args_returns_true(self):
        def func(bar=None):
            return True

        allow(self.subject).instance_method.with_args_validator(
            func).and_return('Bob')
        self.subject.instance_method() == 'Bob'

    def test_matcher_with_positional_and_kwargs_returns_true(self):
        def func(foo, bar=None):
            return True

        allow(self.subject).method_with_default_args.with_args_validator(
            func).and_return('Bob')
        self.subject.method_with_default_args('bob', bar='Barker') == 'Bob'

    def test_matcher_with_positional_and_kwargs_returns_false(self):
        def func(foo, bar=None):
            return False

        allow(self.subject).method_with_default_args.with_args_validator(
            func).and_return('Bob')
        with raises(UnallowedMethodCallError):
            self.subject.method_with_default_args('bob', bar='Barker')

    def test_matcher_returns_true_but_args_do_not_match_call_signature(self):
        allow(self.subject).instance_method.with_args_validator(lambda x: True)
        with raises(VerifyingDoubleArgumentError):
            self.subject.instance_method('bob')
Exemple #55
0
    def test_allows_call_with_no_arguments(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.with_no_args()

        assert subject.instance_method() is None
Exemple #56
0
    def test_passes_when_called_less_than_at_most_times(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.at_most(2).times

        subject.instance_method()
Exemple #57
0
    def test_passes_if_an_expected_method_call_is_made(self):
        subject = InstanceDouble('doubles.testing.User')

        expect(subject).instance_method

        subject.instance_method()
Exemple #58
0
    def test_allows_call_with_no_arguments(self):
        subject = InstanceDouble('doubles.testing.User')

        allow(subject).instance_method.with_no_args()

        assert subject.instance_method() is None