Junit 测试列表 returns null 即使列表中的对象已被模拟
Junit test list returns null even when objects inside the list have been mocked
我正在使用 Junit4 和 Mockito 来测试一些逻辑。
在我 运行 测试方法之后,结果是 return 一个对象的空列表,同时我模拟了对象并将其添加到列表中。结果列表中应该有一个对象。
我已尝试调试测试,但仍然看到结果列表不包含任何对象。下面的代码只是为了模拟我的真实代码,但它们基本上是相同的想法。
这是我要测试的方法:在该方法中创建了一个新列表,然后有一些过滤器继续在列表中添加项目,然后 return 结果。
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;
}
这是测试方法逻辑。我嘲笑了一个对象,期望结果 return 同一个对象
@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");
}
测试应该会通过,但它会失败并出现以下错误:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
还有什么我需要模拟才能得到预期的结果吗?
1) 你从不嘲笑class under test
2) 您必须在 class under test
上设置模拟值
classToTest = new ClassToTest();
template = mock(Template.class);
classToTest.setTemplate(template);
when(template.getTemplates()).thenReturn(templates);
List<TemplateDto> result = classToTest.getTemplates("template1");
我正在使用 Junit4 和 Mockito 来测试一些逻辑。
在我 运行 测试方法之后,结果是 return 一个对象的空列表,同时我模拟了对象并将其添加到列表中。结果列表中应该有一个对象。
我已尝试调试测试,但仍然看到结果列表不包含任何对象。下面的代码只是为了模拟我的真实代码,但它们基本上是相同的想法。
这是我要测试的方法:在该方法中创建了一个新列表,然后有一些过滤器继续在列表中添加项目,然后 return 结果。
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;
}
这是测试方法逻辑。我嘲笑了一个对象,期望结果 return 同一个对象
@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");
}
测试应该会通过,但它会失败并出现以下错误:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
还有什么我需要模拟才能得到预期的结果吗?
1) 你从不嘲笑class under test
2) 您必须在 class under test
上设置模拟值 classToTest = new ClassToTest();
template = mock(Template.class);
classToTest.setTemplate(template);
when(template.getTemplates()).thenReturn(templates);
List<TemplateDto> result = classToTest.getTemplates("template1");