当前位置: 首页 > 知识库问答 >
问题:

用MongoDB测试Spring Web Service

锺超英
2023-03-14

我正在为充当MongoDB接口的Spring Boot Web应用程序编写服务测试。理想情况下,我的服务测试将测试我的Spring应用程序的每个组件,然后最后测试一个被嘲弄的MongoTemplate。下面的代码使用MockMvc命中我的webendpoint。

@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包含一个@AutoWiredMyMongoRepository,它反过来实现MongoRepository并需要一个MongoTemplatebean。只有在能够找到运行中的MongoDB实例时,此代码才能正确执行(此示例更多地是我的服务和MongoDB之间的集成测试)。

如何在使用mockmvc的同时模拟MongoTemplate?

共有1个答案

卓嘉良
2023-03-14

您需要将以下行添加到您的测试单元中:

@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应用程序。

 类似资料:
  • 本文向大家介绍MongoDB分片测试,包括了MongoDB分片测试的使用技巧和注意事项,需要的朋友参考一下 分片是mongoDB扩展的一种方式。分片分割一个collection并将不同的部分存储在不同的机器上。当一个数据库的collections相对于当前空间过大时,你需要增加一个新的机器。分片会自动的将collection数据分发到新的服务器上。 1. 连接到mongos可查看系统相关信息 2.

  • 我写了一个小的学习项目来使用MongoDB。我使用Spring数据获取Mongo存储库。创建RestController并通过Service(另一个类)使用MongoRepository从mongodb检索信息并将其呈现给浏览器是相当容易的。 现在我的问题是:我实际上不想在我存储数据的同一个数据库上运行一些测试。此外,我有一个重要的方法,在此之后,所有数据都将消失。我发现嵌入式mongodb是一种

  • UserRepository如下所示: 我得到以下异常: 无法实例化[...Repository.UserRepository]:指定的类是接口 我的CustomerRepository如下所示(带有@configuration注释): 实际上,我不知道为了让测试运行,我需要哪些注释--也许您会有另一个建议,以便我可以解决这个问题。

  • 数据量 线程数 连接数 测试时间 4000(集合)*10000(文档数) 4 22、59 40分钟 4000(集合)*10000(文档数) 8 26分钟 4000(集合)*10000(文档数) 16 (20、20、20、66、41)(118、70、43、18、1) 20分钟 2. 数据插入测试 数据量 线程数 测试时间 1(集合)*1000万(文档数) 10(进程数)*2(线程数) 10分钟 参考

  • 问题内容: 我选择的数据库是MongoDB。我正在编写一个数据层API,以从客户端应用程序中抽象实现细节- 也就是说,我实质上是在提供一个公共接口(一个充当IDL的对象)。 我正在以TDD方式测试自己的逻辑。在每个单元测试之前,调用一个方法来创建数据库单例,此后,当测试完成时,将调用一个方法来删除数据库。这有助于促进单元测试之间的独立性。 几乎所有单元测试(即 执行上下文查询 )都需要先进行某种插

  • 我想确保@Transactional注释工作,所以我写了一篇测试save and Publishing文章--我的kafka publisher是一个模拟,它会在任何调用上抛出异常。我想确保MongoDB回滚持久化的文章。 现在我的测试失败了,因为无法在MongoClient中启动会话 我还尝试创建一个自定义的IMongodConfig 并启动复制: 因此,我的问题是,是否有可能创建一个运行的复制