首页 > 解决方案 > 反应式存储库不保存对象

问题描述

我想我不太了解 Reactive 存储库和使用它的处理程序是如何工作的。我编写了一个特殊的测试类,只是为了使用存储库测试最简单的处理程序

 @SpringBootTest
 class TestRepository() {

   @Autowired
   lateinit var myRepo: myRepo

   @Autowired
   lateinit var myHandler: MyHandler

   @Test
    fun `save with a handler`() {
    val myObject = MyObject()
    myHandler.save(request).subscribe()

    StepVerifier.create (myRepository.count() ) <--this does not work
        .expectNext (1L )
        .expectComplete().verify()
   }

   @Test
   fun `test only database saving`() {
      val object = MyObject()

      myRepo.save(myRepo).subscribe()

      StepVerifier.create (myRepo.count() ) <-- this works
        .expectNext (1L )
        .expectComplete().verify()
   }
}

我的处理程序和存储库以下列方式定义:

  @Service
  class MyHandler(private val myRepository: MyRepository) {

     fun save(object: MyObject): Mono<MyObject> {
       return myRepository.save(request)
     }
  }

  @Repository
  interface MyRepo : ReactiveMongoRepository<MyObject, String> {

    fun save(request: MyObject): Mono<MyObject>
  }

我也尝试过使用subscribe方法,但仍然看不到结果。

我应该纠正什么?

标签: mongodbspring-bootkotlinreactive-programmingspring-repositories

解决方案


使用Mono.then函数链接savecount函数并获得结果 Mono:

@Test
fun `save with a handler`() {
  val countAfterSave = myHandler.save(MyObject()).then(myRepository.count());

  StepVerifier.create(countAfterSave)
    .expectNext(1L)
    .expectComplete()
    .verify()
}

推荐阅读