我有一项服务,可以在存储库中找到一个对象并返回该对象的一个属性。 我想尝试测试服务模拟访问存储库,但是当我调用服务方法时返回null。
我的服务:
@Service
public class MyService{
public Object getModuleObj(String id, String module) {
Object repObj = Repository.findOne(id,module);
return repObj.getModule();
}
}
我的考试班:
@RunWith(SpringJUnit4ClassRunner.class)
@WebMvcTest(MyController.class)
@ContextConfiguration(classes = AnnotationConfigContextLoader.class)
public class ApiTest {
@MockBean
public MyRepository repository;
@MockBean
private MyService service;
@Test
public void testGetObjectOfRepo() throws Exception {
Object obj = new Object();
Module mod = new Module();
mod.setId("6");
mod.setModule("test");
obj.add(mod);
/** mock repository response **/
Mockito.when(repository.findOne("6","test")).thenReturn(obj);
/** invoke service method**/
String module= "test";
/** serviceResponse return null **/
Module serviceResponse = this.service.getModuleObj("6","test");
Assert.assertEquals(mod, serviceResponse);
}
}
对象之间的比较失败,因为serviceResponse为空。我在嘲笑存储库是正确的吗?
答案 0 :(得分:0)
您不能使用Mockito模拟静态方法。如果要测试getModuleObj
方法,则必须像下面这样提取对非静态方法的静态调用:
@Service
public class MyService{
public Object getModuleObj(String id, String module) {
Object repObj = this.findOne(id,module);
return repObj.getModule();
}
Object findOne(String id, String module){
return Repository.findOne(id,module);
}
}
然后您可以通过创建间谍来测试方法的其余部分:
@Test
public void testGetObjectOfRepo() throws Exception {
MyService service = spy(MyService.class);
Object obj = new Object();
//initialize the obj
doReturn(obj).when(service.findOne(anyString(), anyString()));
Module serviceResponse = service.getModuleObj("6","test");
//asertions
}
我不确定这是否是您的意图,因为您的代码似乎有点混乱。我真的希望您不要创建类Object
,因为java.lang.Object
没有方法add
答案 1 :(得分:0)
我正在使用ReflectionTestUtils解决在服务中注入存储库访问的问题。 测试类的代码:
@Test
public void testMyService() throws Exception {
Object obj = new Object();
Module mod = new Module();
mod.setId("6");
mod.setModule("test");
obj.add(mod);
/** mock repository response **/
Mockito.when(repository.findOne("6","test")).thenReturn(obj);
/** inject mock repository in service*/
ReflectionTestUtils.setField(this.service, null, "filterRepository", repository, null);
//Asserts
}