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");