-
-
Notifications
You must be signed in to change notification settings - Fork 13
Description
Current behaviour: When we call verifyStubbedInvocationsAreUsed it checks that all stubbed invocations are called at least once, ensuring we don't have unnecessary stubbing. This is often useful to have in afterEach hook. However, there are cases where we want some specific mocks to be skipped by this check. Java mockito has lenient which allows a stubbed invocation to be set up without being called. This is useful in a case where we want to always mock some call in the beforeEach regardless of whether it is called in the test body (see example below). Currently, there isn't support for this.
class TestCase:
def setUp(self):
mockito.when("external_module").real_call_that_should_always_be_stubbed(...).thenReturn("Some response")
def tearDown(self):
mockito.verifyStubbedInvocationsAreUsed()
def test_some_behaviour(self):
# Do some stuff that don't call the stub
def test_some_other_behaviour(self):
# Do some stuff that call the stub
Proposed Behaviour: Thinking this can be solved in one of two ways:
- Have an optional
lenientargument added towhen,when2,expect,patch. The actual name of the argument can be something other thanlenientas we currently havestrictand this can be confusing. Also Java Mockito's lenient argument seems to skip argument mismatch check so having the same name (but modified behaviour) could be misleading. - Relax the validity check on the
atleastargument inexpectso zero can be passed as a valid argument. Hence in beforeEach, user can specifymockito.expect("external_module", atleast=0).real_call_that_should_always_be_stubbed(...).thenReturn("Some response"). And this will still pass verifyStubbedInvocationsAreUsed in afterEach hook even if no calls are made to stubbed invocation in the test body.
I think Option 2 will be the least invasive but I'm keen to hear others thoughts.
I will also be happy to raise a PR with the changes required