Java 如何使用具有多个其他依赖项(服务和repo)的模拟存储库测试服务?

Java 如何使用具有多个其他依赖项(服务和repo)的模拟存储库测试服务?,java,spring,spring-boot,junit,mockito,Java,Spring,Spring Boot,Junit,Mockito,我正在用Mockito测试我的SpringBoot服务 问题是,我正在测试的一些服务与其他服务和存储库有多个依赖关系,这使得很难在更深层次的服务上执行测试 例如: “TestService”类包含以下方法: public Test addTagToTest(Long id, Long tagId) { Tag tag = tagService.getById(tagId); Test test = getById(id); test.addTag(tag); r

我正在用Mockito测试我的SpringBoot服务

问题是,我正在测试的一些服务与其他服务和存储库有多个依赖关系,这使得很难在更深层次的服务上执行测试

例如:

“TestService”类包含以下方法:

public Test addTagToTest(Long id, Long tagId) {
    Tag tag = tagService.getById(tagId);
    Test test = getById(id);

    test.addTag(tag);
    return update(test);
}
此类具有与“TagService”的依赖关系。 注意:每个服务都有自己的存储库

这是TestService正在使用的服务类:

@Service
public class TagService extends GenericAbstractService<Tag, TagRepo> {
    public Tag getTagByName(String tagName){

所以现在的问题是如何测试我的TestService,它有依赖项,有依赖项?必须模拟所有存储库

你不必嘲笑所有人。模拟一层类就足够了。 测试服务正在调用TagService.getById()。在本例中,TagService对存储库进行方法调用并获得结果。我们可以模拟TagService.getById()。具体来说,莫基托

@Mock
private TagService tagService;

@Test
public void yourTest() {
    doReturn(<tag object you want>)
            .when(tagService).getById();
}
@Mock
私人标签服务;
@试验
公共测试(){
多雷图恩()
.when(tagService).getById();
}

在本例中,实际上不会调用TagService.getById。它直接返回您想要返回的内容。因此,您不必担心TagService中自动连接的存储库。希望这能有所帮助。

你不必嘲笑所有人。模拟一层类就足够了。 测试服务正在调用TagService.getById()。在本例中,TagService对存储库进行方法调用并获得结果。我们可以模拟TagService.getById()。具体来说,莫基托

@Mock
private TagService tagService;

@Test
public void yourTest() {
    doReturn(<tag object you want>)
            .when(tagService).getById();
}
@Mock
私人标签服务;
@试验
公共测试(){
多雷图恩()
.when(tagService).getById();
}

在本例中,实际上不会调用TagService.getById。它直接返回您想要返回的内容。因此,您不必担心TagService中自动连接的存储库。希望这有帮助。

您是加载spring上下文进行测试还是只加载单元测试?请参阅您是加载spring上下文进行测试还是只加载单元测试?请参阅。您还必须记住向类添加@RunWith(MockitoJUnitRunner.class)注释,或添加带有@Before注释的方法,该注释将包括MockitoAnnotations.initMocks(这是真的。我是想解释这个问题,而不是实际的代码片段。@476rick,如果这个答案对你有效,你能接受吗?或者如果你期望其他东西,请更新这个问题。你还必须记得添加@RunWith(MockitoJUnitRunner.class)向类中添加注释,或添加带有@Before注释的方法,该注释将包括MockitoAnnotations.initMocks(this);True。我试图对问题进行解释,而不是实际的代码片段。@476rick,如果这个答案对您有效,您能接受吗?或者如果您期望其他内容,请更新该问题。