mock when 无返回怎么办_Mockito when()。thenReturn()在测试系统中不起作用
时间: 2023-11-22 14:52:47 浏览: 170
当`Mockito when().thenReturn()`在测试系统中不起作用时,有几种可能的原因:
1. 没有正确地导入Mockito库:请确保你在测试类中正确地导入了Mockito库。
2. 没有正确地初始化Mockito:在测试类的setUp()方法中,你应该初始化Mockito并设置mock对象。例如:
```
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
```
3. 当中的参数不匹配:请确保你在when中使用了与实际调用相同的参数。例如:
```
when(mockObject.methodName("param1")).thenReturn(expectedResult);
```
4. 当中的参数类型不匹配:请确保你在when中使用了正确的参数类型。例如,如果你的方法期望一个整数参数,但你传递了一个字符串参数,则会出现问题。
5. 没有正确地设置对象的行为:请确保你在when中正确地设置了mock对象的行为。例如,如果你想在调用方法时抛出异常,则应该使用以下代码:
```
when(mockObject.methodName()).thenThrow(new Exception());
```
希望这些解决方案可以帮助你解决问题!
相关问题
java 单元测试inject_Mockito中@Mock与@InjectMock
在 Java 单元测试中,Mockito 是一个常用的框架,用于模拟对象的行为。其中 @Mock 和 @InjectMocks 是两个常用的注解。
@Mock 用于模拟一个类的行为,例如:
```java
@Mock
private UserService userService;
```
@InjectMocks 用于注入 Mock 对象,例如:
```java
@InjectMocks
private UserController userController;
```
当使用 @InjectMocks 注解时,Mockito 会自动将被注入的 Mock 对象注入到目标对象中。
举个例子,如果我们要测试一个 UserController,其中依赖了 UserService,我们可以使用以下代码:
```java
@RunWith(MockitoJUnitRunner.class)
public class UserControllerTest {
@Mock
private UserService userService;
@InjectMocks
private UserController userController;
@Test
public void testGetUser() {
User user = new User();
user.setId(1L);
user.setName("张三");
Mockito.when(userService.getUserById(1L)).thenReturn(user);
User result = userController.getUser(1L);
Assert.assertEquals(user, result);
}
}
```
在这个例子中,我们使用 @Mock 注解模拟了 UserService,使用 @InjectMocks 注解注入了 UserController,并在测试方法中设置了 UserService 的行为,最后验证了 UserController 的行为是否正确。
Mock when thenReturn不生效
Mockito是一个流行的Java单元测试框架,其中`when()`方法用于设置mock对象的行为,而`thenReturn()`则用于指定在特定条件下返回的结果。如果你发现`when.thenReturn()`不生效,可能是以下几个原因:
1. **未正确初始化**:确保你已经正确创建并配置了Mock对象,并使用`when()`设置了期望的行为。
```java
Mockito.when(mockObject.someMethod()).thenReturn(returnValue);
```
2. **条件匹配错误**:确认你在`thenReturn()`中设置的行为是在实际调用`someMethod()`时应该触发的条件。如果没有匹配到预期的场景,它将不会返回预设值。
```java
Mockito.when(mockObject.someMethod(arg)).thenReturn(returnValueForArg);
```
3. **`doAnswer()`或`doThrow()`干扰**:如果之前使用了`doAnswer()`或`doThrow()`来改变mock对象的行为,那么`thenReturn()`可能无效。在这种情况下,需要移除或重新配置这些拦截。
4. **`verify()`未执行**:在模拟结束后,通常你需要使用`verify()`来检查mock对象是否按照预期被调用了。如果没有执行这个验证,`thenReturn()`就不会起作用。
5. **并发问题**:如果在多线程环境中,`when().thenReturn()`可能只对当前线程有效。请确保在正确的上下文中设置行为。
记得检查每个环节,找出导致不生效的具体原因。如果有更具体的代码示例,分析起来会更容易。
阅读全文