이를 사용하기 위해서는 mockito 의존을 새로 추가해야된다. mockito-inline 를 추가해야된다. mockito-core를 대체할 수 있다.
testImplementation 'org.mockito:mockito-inline:4.2.0'
정적 메소드를 목킹하기위해서는 먼저 MockedStatic
객체를 만들어야된다. 이 객체는 AutoClosable
이기때문에 try-with-resources로 감싸는게 좋다. try-with-resource 블럭 내부에서는 목킹이 되고, 밖으로 벗어나면 적용되지 않는다.
@Test
void givenStaticMethodWithNoArgs_whenMocked_thenReturnsMockSuccessfully() {
assertThat(StaticUtils.name()).isEqualTo("Baeldung");
try (MockedStatic<StaticUtils> utilities = Mockito.mockStatic(StaticUtils.class)) {
utilities.when(StaticUtils::name).thenReturn("Eugen");
assertThat(StaticUtils.name()).isEqualTo("Eugen");
}
assertThat(StaticUtils.name()).isEqualTo("Baeldung");
}
@Test
void givenStaticMethodWithArgs_whenMocked_thenReturnsMockSuccessfully() {
assertThat(StaticUtils.range(2, 6)).containsExactly(2, 3, 4, 5);
try (MockedStatic<StaticUtils> utilities = Mockito.mockStatic(StaticUtils.class)) {
utilities.when(() -> StaticUtils.range(2, 6))
.thenReturn(Arrays.asList(10, 11, 12));
assertThat(StaticUtils.range(2, 6)).containsExactly(10, 11, 12);
}
assertThat(StaticUtils.range(2, 6)).containsExactly(2, 3, 4, 5);
}