13.2.3 Kiểm thử các repository Cassandra phản ứng
Tới thời điểm này, có lẽ bạn sẽ không ngạc nhiên khi biết rằng việc kiểm thử các repository Cassandra phản ứng khá giống với cách bạn kiểm thử các repository MongoDB phản ứng. Ví dụ, hãy xem IngredientRepositoryTest trong đoạn mã dưới đây và thử xem bạn có nhận ra sự khác biệt nào so với đoạn mã 13.15 không.
Liệt kê 13.22 Kiểm thử IngredientRepository với Cassandra
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));
});
}
}Bạn có thấy không? Nếu như phiên bản MongoDB được chú thích với @DataMongoTest, thì phiên bản Cassandra mới này được chú thích với @DataCassandraTest. Chỉ có vậy thôi! Ngoài ra, các bài kiểm thử là hoàn toàn giống nhau.
Điều tương tự cũng đúng với OrderRepositoryTest. Chỉ cần thay thế @DataMongoTest bằng @DataCassandraTest, còn mọi thứ khác vẫn giữ nguyên, như được thể hiện dưới đây:
@DataCassandraTest
public class OrderRepositoryTest {
...
}Một lần nữa, sự nhất quán giữa các dự án Spring Data khác nhau còn mở rộng cả đến cách viết bài kiểm thử. Điều này giúp dễ dàng chuyển đổi giữa các dự án sử dụng các loại cơ sở dữ liệu khác nhau mà không cần phải suy nghĩ quá nhiều về cách phát triển chúng.
