java - 为具有两个 When 语句的测试获取 WrongTYpeOfReturnValue

标签 java unit-testing junit mockito

我有两个时间:

when(mock.returnList()).thenReturn(<List>);
when(injectedMock.returnFloat()).thenReturn(float);

该错误表明 returnList() 函数无法返回 float 。我不知道到底是什么原因造成的,因为 returnList() 返回一个列表。

代码:

@Mock
private Row row;

@InjectMocks
private Service service;

@Test
public void getTest() {

RowMock rowMock = new RowMock(); 
List<Row> rows = new ArrayList<Row>();

rowMock.setBrandCode("YYY");
rowMock.setName("NAME");
rowMock.setDataType(Float.class);
rowMock.setcValue("cValue");
rowMock.setNumberValue(randomNumber);
rowMock.setDescription("Description");

rows.add(rowMock);

when(repo.findByName(Mockito.<String>anyList())).thenReturn(rows);
when(service.getByName("NAME", "YYY", Float.class)).thenReturn(randomNumber);        

}

RowMock 是我创建的一个模拟类,它实现了 Row 类,因此我可以从 repo.findByName() 返回 List。

最佳答案

您正在尝试模拟一个普通对象:

@InjectMocks
private Service service;

...

when(service.getByName("NAME", "YYY", Float.class)).thenReturn(randomNumber);

你不能那样做。如果您必须模拟被测试的类,请使用 spy :

@InjectMocks
@Spy
private Service service;

并使用反向 stub :

doReturn(randomNumber).when(service).getByName(...);

关于java - 为具有两个 When 语句的测试获取 WrongTYpeOfReturnValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58817398/

相关文章:

java - 用于 Drools 的 Eclipse Java 自动完成

java - 为什么我的自定义 DataSource getConnection() 抛出 "SQLException: The url cannot be null"?

python - Django断言post_save信号被调用

junit - eclemma - 如何忽略源

java - JUNIT 空指针异常

java - 小时和分钟转为带小数部分的小时值

java - 将 CSV 文件转换为 XLS 时出现问题

java - 如何使用mockito对图节点进行单元测试?

java - 如何对更改 Java 中数据的方法进行单元测试

junit - 如何并行运行测试但获得整齐有序的测试输出?