Java 如何使用具有多个其他依赖项(服务和repo)的模拟存储库测试服务?
我正在用Mockito测试我的SpringBoot服务 问题是,我正在测试的一些服务与其他服务和存储库有多个依赖关系,这使得很难在更深层次的服务上执行测试 例如: “TestService”类包含以下方法: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
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,如果这个答案对您有效,您能接受吗?或者如果您期望其他内容,请更新该问题。