小编Du *_*ran的帖子

即使模拟了列表中的对象,Junit测试列表也将返回null

我正在使用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)

为了获得预期的结果,我还有什么需要嘲笑的吗?

java unit-testing junit4 mockito

2
推荐指数
1
解决办法
49
查看次数

Java按字母顺序对字符串进行排序并保持ASCII顺序

名单是: 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)

java sorting java-stream

2
推荐指数
1
解决办法
1994
查看次数

标签 统计

java ×2

java-stream ×1

junit4 ×1

mockito ×1

sorting ×1

unit-testing ×1