[SPRING #5] Unit Test
상태 검증 : 메소드가 수행된 후, 객체의 상태를 확인하여 올바르게 동작했는지를 확인하는 검증법입니다
행위 검증 : 메소드의 리턴 값으로 판단할 수 없는 경우 특정 동작을 수행하는지확인하는 검증법입니다
Spring의 JUnit 5 지원
https://docs.spring.io/spring-framework/docs/current/reference/html/testing.html
단위 테스트 지원
- Mock Objects 지원
- General Testing Utilities
- Spring MVC Testing Utilities
통합 테스트 지원
Spring TestContext 프레임워크
https://docs.spring.io/spring-framework/docs/current/reference/html/testing.html#testcontext-framework
Hamcrest Unit Test
주의해야 할 점은 AssertThat은 (실제값, 기대값) 순서이다.
1. prices의 사이즈가 3인가
2. prices안에 모든 값이 1보다 큰가
3. 순서 상관 없이 3,4,2가 포함되어있는가
4. prices는 2를 가지고 있는가
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
이거의 의미가 뭘까? 클래스 단위로 인스턴스를 만든다는 것!!
@SpringBootTest
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@ActiveProfiles("test")
class JdbcProductRepositoryTest {
static EmbeddedMysql embeddedMysql;
@BeforeAll
static void setup() {
var config = aMysqldConfig(v5_7_10)
.withCharset(Charset.UTF8)
.withPort(2215)
.withUser("test", "test1234!")
.withTimeZone("Asia/Seoul")
.build();
embeddedMysql = anEmbeddedMysql(config)
.addSchema("test-order_mgmt", ScriptResolver.classPathScript("schema.sql"))
.start();
}
@AfterAll
static void cleanup() {
embeddedMysql.stop();
}
@Autowired
ProductRepository repository;
private final Product newProduct = new Product(UUID.randomUUID(), "new-product", Category.COFFEE_BEAN_PACKAGE, 1000L);
@Test
@Order(1)
@DisplayName("상품을 추가할 수 있다.")
void testInsert() {
repository.insert(newProduct);
var all = repository.findAll();
assertThat(all.isEmpty(), is(false));
}
@Test
@Order(2)
@DisplayName("상품을 이름으로 조회할 수 있다.")
void testFindByName() {
var product = repository.findByName(newProduct.getProductName());
assertThat(product.isEmpty(), is(false));
}
@Test
@Order(3)
@DisplayName("상품을아이디로 조회할 수 있다.")
void testFindById() {
var product = repository.findById(newProduct.getProductId());
assertThat(product.isEmpty(), is(false));
}
@Test
@Order(4)
@DisplayName("상품들을 카테고리로 조회할 수 있다.")
void testFindByCategory() {
var product = repository.findByCategory(Category.COFFEE_BEAN_PACKAGE);
assertThat(product.isEmpty(), is(false));
}
}
상품을 아이디로 조회할 수 있다의 테스트는 실패한다.
왜일까?
그것은 바로 메서드 마다 하기 때문이다.
new Product(UUID.randomUUID(),
"new-product", Category.COFFEE_BEAN_PACKAGE, 1000L);
해결
(1) static으로 인스턴스 만들기
private static final Product newProduct = new
Product(UUID.randomUUID(), "new-product",
Category.COFFEE_BEAN_PACKAGE, 1000L);
(2) @TestInstance(TestInstance.Lifecycle.PER_CLASS)
Author And Source
이 문제에 관하여([SPRING #5] Unit Test), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@eunseo2/TEST저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)