fabioCollini / DaggerMock

A JUnit rule to easily override Dagger 2 objects
Apache License 2.0
1.16k stars 96 forks source link

Mocks not initialised correctly #89

Open nmihalek opened 5 years ago

nmihalek commented 5 years ago

Hi, first off I like your library and I find it quite useful, great job!

I have found a small bug, which has a workaround but is quite odd.

When using the library with Espresso tests, mocking methods will not work if only doAnswer(...) is used. This applies to the mocks which are injected by Dagger. So for example in this instance the code inside doAnswer will not be executed:

@Mock
Parser injectable;

@Test
void test() {
    doAnswer(invocation -> /*some code*/)
        .when(injectable).parse(any());

    Robolectric.setupActivity().get();
}

But if we have a simple when on the same mock, everything will work as expected:

@Mock
Parser injectable;

@Test
void test() {
    doAnswer(invocation -> /*some code*/)
        .when(injectable).parse(any());
    when(injectable.getConfig()).thenReturn("");

    Robolectric.setupActivity().get();
}

Any idea what is happening, and if this is a known issue?

Thanks in advance!

fabioCollini commented 5 years ago

Hi, I have never seen a problem like this and I can't think of any reason why it should happen :( It's just another way of defining the mock, it shouldn't change the behaviour. Do this always happen? Are you using Robolectric? Thanks for your report