Spring 启动测试@Mock 注释不创建模拟对象
Spring Boot test @Mock annotation doesn't create mock object
我正在使用 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
方法中的两个变量都为空,即使在 class 上使用了 @RunWith(MockitoJUnitRunner.class)
注释,如其他 SO 问题所述。
如果我像下面的代码那样手动创建模拟,那么它工作正常:
@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");
...
}
...
}
MockitoJUnitRunner 与 JUnit 5 不兼容。
您需要使用 @ExtendWith(MockitoExtension.class)
而不是它。
此 class 位于依赖项中:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
在 JUnit 5 中使用 Mockito 注释需要调用 MockitoAnnotations.initMocks(this);在测试方法运行之前。尝试将它添加到 @BeforeEach 方法中,然后看看它是否有效。有关 MockitoAnnotations 的更多信息:https://static.javadoc.io/org.mockito/mockito-core/2.2.28/org/mockito/MockitoAnnotations.html
我正在使用 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
方法中的两个变量都为空,即使在 class 上使用了 @RunWith(MockitoJUnitRunner.class)
注释,如其他 SO 问题所述。
如果我像下面的代码那样手动创建模拟,那么它工作正常:
@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");
...
}
...
}
MockitoJUnitRunner 与 JUnit 5 不兼容。
您需要使用 @ExtendWith(MockitoExtension.class)
而不是它。
此 class 位于依赖项中:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
在 JUnit 5 中使用 Mockito 注释需要调用 MockitoAnnotations.initMocks(this);在测试方法运行之前。尝试将它添加到 @BeforeEach 方法中,然后看看它是否有效。有关 MockitoAnnotations 的更多信息:https://static.javadoc.io/org.mockito/mockito-core/2.2.28/org/mockito/MockitoAnnotations.html