英文:
how to mock a mehod using spring boot SpringJUnit4ClassRunner where mongo tamplate is used where the method contains static call
问题
我正在分享一个包含静态方法调用的方法代码。
public List<String> getTestContent() {
DistinctIterable<String> distinctIterable = mongoTemplate.getCollection("test-doc").distinct("testcontent", String.class);
return StreamSupport.stream(distinctIterable.spliterator(), false).collect(Collectors.toList());
}
我需要模拟这个我分享的方法。我已经尝试了很多方法,但是一直得到空指针错误。
英文:
i am sharing a method code which contains static method call.
public List<String> getTestContent() {
DistinctIterable<String> distinctIterable = mongoTemplate.getCollection("test-doc").distinct("testcontent",String.class);
return StreamSupport.stream(distinctIterable.spliterator(),false).collect(Collectors.toList());
}
i need to mock this method which i shared. I have tried lot of approach but getting null pointer
答案1
得分: 0
我已经为您提供的方法编写了测试。
@RunWith(SpringJunit4ClassRunner.class)
public class MyTestClass
{
@MockBean
private MongoTemplate mongoTemplate;
@MockBean
private MongoCollection<Document> mongoCollection;
@MockBean
private DistinctIterable<String> distinctIterable;
@InjectMocks
private ServiceImpl service;
@Before
public void setUp()throws Exception{
MockitoAnnotations.openMocks(this);
}
public void testGetTestContent(){
List<String> list = new ArrayList<>();
list.add("test1");
list.add("test2");
Spliterator<String> spliterator = list.spliterator();
PowerMockito.when(mongoTamplate.getCollection(Mockito.eq("test-doc"))).thenReturn(mongoCollection);
PowerMockito.when(mongoCollection.distinct(Mockito.eq("testcontent"),Mockito.eq(String.class))).thenReturn(distinctIterable);
PowerMockito.when(distinctIterable.spliterator()).thenReturn(spliterator);
Assert.assertEquals(2,service.getTestContent().size());
}
}
注意: 如果您不想检查返回值的类型,您还可以使用 PowerMockito.doReturn(..).when()
。
英文:
I have written test for the method you provided.
@RunWith(SpringJunit4ClassRunner.class)
public class MyTestClass
{
@MockBean
private MongoTemplate mongoTemplate;
@MockBean
private MongoCollection<Document> mongoCollection;
@MockBean
private DistinctIterable<String> distinctIterable;
@InjectMocks
private ServiceImpl service;
@Before
public void setUp()throws Exception{
MockitoAnnotations.openMocks(this);
}
public void testGetTestContent(){
List<String> list = new ArrayList<>();
list.add("test1");
list.add("test2");
Spliterator<String> spliterator = list.spliterator();
PowerMockito.when(mongoTamplate.getCollection(Mockito.eq("test-doc"))).thenReturn(mongoCollection);
PowerMockito.when(mongoCollection.distinct(Mockito.eq("testcontent"),Mockito.eq(String.class))).thenReturn(distinctIterable);
PowerMockito.when(distinctIterable.spliterator()).thenReturn(spliterator);
Assert.assertEquals(2,service.getTestContent().size());
}
}
Note: You can also use PowerMockito.doReturn(..).when() if you don't want to check the type of value returned
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论