Du *_*ran 2 java unit-testing junit4 mockito
我正在使用Junit4和Mockito测试一些逻辑。
运行测试方法后,结果是在模拟对象并将其添加到列表时返回对象的空列表。结果列表中应该有一个对象。
我尝试调试测试,但仍然看到结果列表不包含任何对象。以下代码只是为了模拟我拥有的真实代码,但是它们基本上是相同的想法。
这是我要测试的方法:在该方法内部创建了一个新列表,然后进行一些过滤以添加列表中的项目,然后返回结果。
public List<TemplateDto> getTemplates(String name) {
List<TemplateDto> result = new ArrayList<>();
result.addAll(
template.getTemplates().stream().filter(t -> t.getName().equals(name))
.map(s -> new TemplateDto(s.getId(),s.getName()))
.collect(Collectors.toList())
);
return result;
}
Run Code Online (Sandbox Code Playgroud)
这是测试方法的逻辑。我嘲笑了一个对象,期望结果返回相同的对象
@Test
public void getTemplates() {
classToTest = mock(ClassToTest.class);
Template template1 = new Template(1,"template1");
List<Template> templates = new ArrayList<>();
templates.add(template1);
template = mock(Template.class);
when(template.getTemplates()).thenReturn(templates);
List<TemplateDto> result = classToTest.getTemplates("template1");
assertEquals(result.get(0).getName(),"template1");
}
Run Code Online (Sandbox Code Playgroud)
测试应该通过,但是失败,并显示以下错误:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
Run Code Online (Sandbox Code Playgroud)
为了获得预期的结果,我还有什么需要嘲笑的吗?
1)您永远不会模拟被测类
2)您必须在被测类上设置模拟值
classToTest = new ClassToTest();
template = mock(Template.class);
classToTest.setTemplate(template);
when(template.getTemplates()).thenReturn(templates);
List<TemplateDto> result = classToTest.getTemplates("template1");
Run Code Online (Sandbox Code Playgroud)