13.2.3 测试响应式 Cassandra Repository

到此,您可能不会惊讶,测试响应式 Cassandra Repository 与测试响应式 MongoDB 存储库的方式完全类似。例如,看看清单 13.22 中的 IngredientRepositoryTest,看看您是否能够发现它与清单 13.15 的区别。

清单 13.22 测试 Cassandra Ingredient Repository。

package tacos.data;

import static org.assertj.core.api.Assertions.assertThat;

import java.util.ArrayList;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.data.cassandra.DataCassandraTest;

import reactor.core.publisher.Flux;
import reactor.test.StepVerifier;
import tacos.Ingredient;
import tacos.Ingredient.Type;

@DataCassandraTest
public class IngredientRepositoryTest {

  @Autowired
  IngredientRepository ingredientRepo;

  @BeforeEach
  public void setup() {
    Flux<Ingredient> deleteAndInsert = ingredientRepo.deleteAll()
      .thenMany(ingredientRepo.saveAll(
        Flux.just(
          new Ingredient("FLTO", "Flour Tortilla", Type.WRAP),
          new Ingredient("GRBF", "Ground Beef", Type.PROTEIN),
          new Ingredient("CHED", "Cheddar Cheese", Type.CHEESE)
      )));
    StepVerifier.create(deleteAndInsert)
          .expectNextCount(3)
          .verifyComplete();
  }

  @Test
  public void shouldSaveAndFetchIngredients() {

    StepVerifier.create(ingredientRepo.findAll())
      .recordWith(ArrayList::new)
      .thenConsumeWhile(x -> true)
      .consumeRecordedWith(ingredients -> {
        assertThat(ingredients).hasSize(3);
        assertThat(ingredients).contains(
          new Ingredient("FLTO", "Flour Tortilla", Type.WRAP));
        assertThat(ingredients).contains(
          new Ingredient("GRBF", "Ground Beef", Type.PROTEIN));
        assertThat(ingredients).contains(
          new Ingredient("CHED", "Cheddar Cheese", Type.CHEESE));
      })
      .verifyComplete();

    StepVerifier.create(ingredientRepo.findById("FLTO"))
      .assertNext(ingredient -> {
        ingredient.equals(new Ingredient("FLTO", "Flour Tortilla", Type.WRAP));
      });
  }

}

您看到了吗?在 MongoDB 版本用 @DataMongoTest 注解的地方,这个新的 Cassandra 版本用 @DataMongoTest 注解。就这样!其他地方完全一样。 OrderRepositoryTest 也是如此。将 @DataMongoTest 替换为 @DataCassandraTest,其他一切都是一样的:

@DataCassandraTest
public class OrderRepositoryTest {
  ...
}

再一次,各种 Spring Data 项目之间的一致性甚至扩展到测试的方式上。这使得在持久化到不同类型的项目时,切换数据库变得很容易,而不必考虑它们是如何开发。

results matching ""

    No results matching ""