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 ""