【发布时间】:2018-04-04 18:45:09
【问题描述】:
我有一个接口,它有两种方法 - convertList 和 convert。
convertList 有一个默认实现,它为其 inputList 中的每个输入调用 convert。
我想为 convertList 编写一个单元测试 -
- 测试它调用 convert 方法的次数是否与 inputlist 的大小一样多
- 测试它是否将每个输入的convertedOutput 对象传递到convertedOutputs 列表
下面是我的界面-
public interface MyConverter {
ConverterOutput convert(final MyDTO input, final String myParam) throws MyDTOConversionException;
default Collection<ConverterOutput> convertList(
final Collection<? extends MyDTO> inputList,
final String myParam)
throws MyDTOConversionException {
try {
List<ConverterOutput> converterOutputs = new ArrayList<>();
for (MyDTO input : inputList) {
converterOutputs.add(this.convert(input, myParam));
}
return converterOutputs;
} catch (NullPointerException npe) {
throw new MyDTOConversionException("Unable to convert dto to converter output", npe);
}
}
}
在模拟接口并存根其转换方法时,我无法实现 1。以下是我的测试课。
@SpringBootTest(classes = MyConverter.class)
public class MyConverterTest extends BaseTest {
class MyDTOImpl extends MyDTO {
@Override
public void someAbstractMethod(String param) {
}
}
@Mock
private ConverterOutput converterOutput;
@Mock
private MyConverter myConverter;
@Mock
private MyDTOImpl myDTO;
@Test
public void testConvertListOfSizeOne() {
String myParam = "1234";
Collection<MyDTO> myDTOS = new ArrayList<>();
myDTOS.add(myDTO);
try {
when(myConverter.convert(myDTO, myParam)).thenReturn(converterOutput);
Collection<ConverterOutput> actualConverterOutputs = myConverter.convertList(myDTOS, myParam);
// check if times convert method was called is as expected
verify(myConverter, times(1)).convert(myDTO, myParam);
// check if number of items in output object are as expected
Assert.assertEquals(actualConverterOutputs.size(), 1);
// check if output object is as expected
for (ConverterOutput c: actualConverterOutputs) {
Assert.assertSame(c, converterOutput);
}
} catch (MyDTOConversionException exception) {
throw new AssertionError("MyDTOConversionException should not have occurred");
}
}
}
以下是我得到的错误
需要但未调用:myConverter.convert(myDTO, "1234"); -> 在 com.abc.project.converters.MyConverterTest.testConvertListOfSizeOne(MyConverterTest.java:49)
但是,还有其他与此模拟的交互: myConverter.convertList( [myDTO], "1234");
【问题讨论】:
标签: java spring-boot junit interface mockito