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 项目之间的一致性甚至扩展到测试的方式上。这使得在持久化到不同类型的项目时,切换数据库变得很容易,而不必考虑它们是如何开发。