我正在为我的Spring Boot Web应用程序编写服务测试,该应用程序充当MongoDB的接口。理想情况下,我的服务测试将在最终命中Mocked MongoTemplate
之前测试Spring应用程序的每个组件。以下代码使用MockMvc来访问我的Web端点。
@RunWith(SpringRunner.class)
@WebMvcTest(MyController.class)
@AutoConfigureDataMongo
public class MyControllerServiceTest {
@Autowired
private MockMvc mvc;
@Autowired
private MongoTemplate mongoTemplate
@SpyBean
private MyMongoRepository myMongoRepository;
@Test
public void createTest() {
MyObject create = new MyObject()
given(this.myMongoRepository.insert(create));
this.mvc.perform(post("localhost:8080/myService")...)...;
}
}
MyController
包含@Autowired MyMongoRepository
,后者又实现MongoRepository
并需要mongoTemplate
bean。只有在找到正在运行的MongoDB实例时,此代码才能正常执行(此示例更像是我的服务和MongoDB之间的集成测试)。
如何在使用MockMvc时模拟MongoTemplate?
答案 0 :(得分:1)
您需要将以下行添加到测试单元:
@MockBean
private MongoTemplate mongoTemplate;
例如,您的课程应如下所示:
@RunWith(SpringRunner.class)
@WebMvcTest(MyController.class, excludeAutoConfiguration = EmbeddedMongoAutoConfiguration.class)
public class MyMvcTests {
@Autowired
private MockMvc mvc;
@MockBean
private MyRepository repository;
@MockBean
private MongoTemplate mongoTemplate;
@Test
public void someTest() {}
}
您可以找到包含集成和单元测试here的完整Spring Boot应用程序。
答案 1 :(得分:0)