我将Spring Boot 2.1与JUnit 5一起使用,并且刚刚创建了一个像这样的测试:
@RunWith(MockitoJUnitRunner.class)
class UserServiceImplTest {
@Mock
private AppProperties appProperties;
@Mock
private UserAccountService userAccountService;
@BeforeEach
void setMockOutput() {
when(appProperties.getPort()).thenReturn("8088");
...
}
...
}
问题是,即使在类上使用了setMockOutput
批注,在@RunWith(MockitoJUnitRunner.class)
方法中两个变量都为null。
如果我像下面的代码一样手动创建模拟,那么它将正常工作:
@RunWith(MockitoJUnitRunner.class)
class UserServiceImplTest {
private AppProperties appProperties;
private UserAccountService userAccountService;
@BeforeEach
void setMockOutput() {
appProperties = Mockito.mock(AppProperties.class);
userAccountService = Mockito.mock(UserAccountService.class);
when(appProperties.getPort()).thenReturn("8088");
...
}
...
}
答案 0 :(得分:3)
MockitoJUnitRunner与JUnit 5不兼容。
您需要使用@ExtendWith(MockitoExtension.class)
代替它。
此类位于依赖项中:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
答案 1 :(得分:0)
在JUnit 5中使用Mockito注释要求您调用MockitoAnnotations.initMocks(this);。测试方法运行之前。尝试将其添加到@BeforeEach方法中,然后查看它是否有效。有关MockitoAnnotations的更多信息,请点击:https://static.javadoc.io/org.mockito/mockito-core/2.2.28/org/mockito/MockitoAnnotations.html