我正在使用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)
为了获得预期的结果,我还有什么需要嘲笑的吗?
名单是: Arrays.asList("Za", "ab", "AB", "Sa", "1ab", "Ab", "!Ab");
如果我用stream().sorted()那么命令是:!Ab 1ab AB Ab Za ab--> 前面的ab不应该za。
如果我用sorted(String.CASE_INSENSITIVE_ORDER)那么顺序是!Ab 1ab ab AB Ab Za--> 这个时候,AB在ab后面。
有什么方法可以将这两个规则结合起来,以便我们按字母顺序排列列表并且大写大于小写?
添加示例:1AB - A0B - AbD - aBD - abd1 - ZAB
按字母顺序排序(Z 永远不会在 a 前面)和数字 > 大写 > 小写 ( AbD > aBD)