【问题标题】:No Mocking on MongoRepository不嘲笑 MongoRepository
【发布时间】:2018-01-30 15:28:12
【问题描述】:

我有以下配置

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootApplication(scanBasePackageClasses= {})
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes= {})
@ActiveProfiles("local")

我想在不模拟 MongoRepository 调用的情况下运行 JUnit 测试,但它会自动模拟 MongoRepo 调用并返回 null。他们有办法解决吗?

【问题讨论】:

  • 自动模拟?没办法请用代码解释
  • 我正在使用 Unit Test 中的 MockMvc 来访问我的控制器,并且控制器有一个服务层,该服务层对 MongoDb repo.FindbyId(id) 进行了此调用,当我返回 null 并返回一个值时运行实际的应用程序。 this.mockMvc.perform(post("/").contentType(MediaType.APPLICATION_JSON).content(data1)).andExpect(status().isOk());

标签: spring spring-mvc spring-boot spring-data mockito


【解决方案1】:

首先,你应该决定你要执行什么样的测试,

  1. 单元测试
  2. 集成测试

如果你在做单元测试,你应该为每一层编写单独的测试用例

控制器层 - 使用 mockmvc 和模拟服务层调用
服务层 - 这里有两个选项,你可以模拟存储库调用,或者你可以在内存数据库(如 Fongo)并在测试之前放置一些数据并对其进行测试。

如果您想使用真实数据库一起测试所有层,那么您应该编写集成测试。

【讨论】:

  • 我想一起测试整个微服务套件,即集成测试。我正在使用 Junit 来做到这一点,它会导致那些嘲笑问题?
  • 如果你想做集成测试,你为什么嘲笑
  • 我不是在嘲笑,而是当我尝试调用我的顶级控制器时。它会导致 db 层被自动模拟。和上下文配置有关吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 2016-10-02
  • 2019-12-20
  • 1970-01-01
  • 2019-02-15
相关资源
最近更新 更多