Wro*_*ong 4 spring mockito mongodb springmockito spring-boot
我想要测试的服务中有一个方法,该方法使用MongoTemplate,如下所示:
\n@Service\npublic class MongoUpdateUtilityImpl implements MongoUpdateUtility {\n private final MongoTemplate mongoTemplate;\n \n @Autowired\n MongoUpdateUtilityImpl (final MongoTemplate mongoTemplate) {\n this.mongoTemplate = mongoTemplate;\n }\n\n @Override\n public Object update(final String id, final Map<String, Object> fields, final Class<?> classType) {\n ...\n this.mongoTemplate.updateFirst(query, update, classType);\n return this.mongoTemplate.findById(id, classType);\n } \n}\nRun Code Online (Sandbox Code Playgroud)\n然后我尝试使用 mongo 模板的模拟方法来测试此方法:
\n@SpringBootTest\n@RunWith(SpringJUnit4ClassRunner.class)\n@ActiveProfiles("test")\npublic class MongoUpdateUtilityTest {\n @MockBean\n private MongoTemplate mongoTemplate;\n\n @Autowired\n private MongoUpdateUtility mongoUpdateUtility;\n\n /**\n * Test en el que se realiza una actualizaci\xc3\xb3n correctamente.\n */\n @Test\n public void updateOK1() {\n final Map<String, Object> map = new HashMap<>();\n\n map.put("test", null);\n map.put("test2", "value");\n\n when(mongoTemplate.updateFirst(Mockito.any(Query.class), Mockito.any(Update.class), Mockito.any(Class.class)))\n .thenReturn(null);\n when(mongoTemplate.findById(Mockito.anyString(), Mockito.any(Class.class))).thenReturn(null);\n\n assertNull(this.mongoUpdateUtility.update("2", map, Map.class));\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n我读过这个问题,但是当我尝试标记为解决方案的答案时,它说 MongoTemplate 无法初始化。我更喜欢模拟它而不是使用和嵌入数据库,因为我可以使用的库受到限制。
\n我的错误:
\norg.springframework.beans.factory.BeanCreationException: Error creating bean with name \'operacionesPendientesRepository\' defined in es.santander.gdopen.operpdtes.repository.OperacionesPendientesRepository defined in @EnableMongoRepositories declared on MongoRepositoriesRegistrar.EnableMongoRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.NullPointerException\nRun Code Online (Sandbox Code Playgroud)\n
您正在使用@SpringBootTest,它会显示整个应用程序上下文。这意味着应用程序中定义的每个 bean 都将被初始化。
对于 @Service 的测试来说,这是一种过度的杀伤力:
对于 @Service 的测试,我建议您采用更简单的方法并单独测试服务。
| 归档时间: |
|
| 查看次数: |
7789 次 |
| 最近记录: |