Spring Web 服务测试 MongoDB
Spring Web Service Test with MongoDB
我正在为我的 Spring Boot Web 应用程序编写服务测试,该应用程序充当 MongoDB 的接口。理想情况下,我的服务测试将测试我的 Spring 应用程序的每个组件,然后最终达到 Mocked MongoTemplate
。以下代码使用 MockMvc 访问我的网络端点。
@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?
我认为更好的测试方法是分别测试您的网络层(控制器)和服务层。
您需要将以下行添加到您的测试单元中:
@MockBean
private MongoTemplate mongoTemplate;
例如,您的 class 应如下所示:
@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() {}
}
您可以找到一个完整的 Spring 引导应用程序,其中包括集成和单元测试 here。
我正在为我的 Spring Boot Web 应用程序编写服务测试,该应用程序充当 MongoDB 的接口。理想情况下,我的服务测试将测试我的 Spring 应用程序的每个组件,然后最终达到 Mocked MongoTemplate
。以下代码使用 MockMvc 访问我的网络端点。
@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?
我认为更好的测试方法是分别测试您的网络层(控制器)和服务层。
您需要将以下行添加到您的测试单元中:
@MockBean
private MongoTemplate mongoTemplate;
例如,您的 class 应如下所示:
@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() {}
}
您可以找到一个完整的 Spring 引导应用程序,其中包括集成和单元测试 here。