Skip to content

JUnit Extension to simplify Mockito static and constructor mocking

License

Notifications You must be signed in to change notification settings

boolivar/mockito-inline-extension

Repository files navigation

mockito-inline-extension

CI license Maven Central

Lines of Code Coverage Bugs Code Smells Duplicated Lines (%)

JUnit jupiter extension for Mockito construction and static mocking.

<dependency>
    <groupId>io.github.boolivar</groupId>
    <artifactId>mockito-inline-extension</artifactId>
    <version>1.0.0</version>
    <scope>test</scope>
</dependency>
testImplementation "io.github.boolivar:mockito-inline-extension:1.0.0"

Construction mock

Mockito:

class FooTest {
    @Test
    void testFoo() {
        try (MockedConstruction mocked = mockConstruction(Foo.class)) {
            Foo foo = new Foo();
            when(foo.method()).thenReturn("bar");
            assertEquals("bar", foo.method());
            verify(foo).method();
        }
    }
}

MockitoInlineExtension:

@ExtendWith(MockitoInlineExtension.class)
class FooTest {
    @ConstructionMock(Foo.class)
    @Test
    void testFoo() {
        Foo foo = new Foo();
        when(foo.method()).thenReturn("bar");
        assertEquals("bar", foo.method());
        verify(foo).method();
    }
}

@ConstructionMock supports list of classes to mock for single test. Test method can accept arguments of type MockedConstruction parameterized by mocked type:

@ConstructionMock({Foo.class, Bar.class})
@Test
void testFooBar(MockedConstruction<Foo> mockedFoo, MockedConstruction<Bar> mockedBar) {
}

Optional mock initialization method can be provided with the same name as test, accepting actual mock and MockedConstruction.Context arguments:

void testFooBar(Foo mock, MockedConstruction.Context context) {
}
void testFooBar(Bar mock, MockedConstruction.Context context) {
} 

Static mock

Mockito:

class FooTest {
    @Test
    void testFoo() {
        try (MockedStatic mocked = mockStatic(Foo.class)) {
            mocked.when(Foo::method).thenReturn("bar");
            assertEquals("bar", Foo.method());
            mocked.verify(Foo::method);
        }
    }
}

MockitoInlineExtension:

@ExtendWith(MockitoInlineExtension.class)
class FooTest {
    @StaticMock(Foo.class)
    @Test
    void testFoo(MockedStatic<Foo> mocked) {
        mocked.when(Foo::method).thenReturn("bar");
        assertEquals("bar", Foo.method());
        mocked.verify(Foo::method);
    }
}

About

JUnit Extension to simplify Mockito static and constructor mocking

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages