【问题标题】:Spring Web Service Test with MongoDB使用 MongoDB 进行 Spring Web 服务测试
【发布时间】:2018-04-30 06:26:33
【问题描述】:

我正在为充当 MongoDB 接口的 Spring Boot Web 应用程序编写服务测试。理想情况下,我的服务测试将在最终达到 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?

【问题讨论】:

    标签: spring mongodb spring-mvc mockito spring-test


    【解决方案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() {}
    }      
    

    您可以找到包含集成和单元测试的完整 Spring Boot 应用程序here

    【讨论】:

      【解决方案2】:

      我认为更好的测试方法是分别测试 Web 层(控制器)和服务层。

      1. 为了测试您的 Web 层,您可以使用 MockMvc 并且您可以模拟您的服务层。

      2. 为了测试你的服务层,它反过来与 mongo 对话,你可以使用 Fongonosqlunit

        这里有一些例子
        https://arthurportas.wordpress.com/2017/01/21/sample-project-using-spring-boot-and-mongodbfongo-and-test-repository-with-nosqlunit/

        https://github.com/JohnathanMarkSmith/spring-fongo-demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-17
        • 1970-01-01
        • 1970-01-01
        • 2013-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多