자바/스프링(Spring)

자주쓰이는 스프링 테스트코드 정리글

류창 2021. 9. 6. 00:00
반응형

 

 

스프링으로 테스트코드를 쓸때 JUnit과 AssertJ의 Assertions 기능을 많이쓰고,

 

Assertions에서 많이 쓰이는 기능들 위주로 글을 써보려고한다.

 

 

Assertions.assertThat(??).isEqualTo(??);

 

이 Assertions는 org.assertj.core.api.Assertions 클래스다 실수하지말자. assertThat메소드가 여기에들어있다.

 

?? 안에는 타입형 객체가 들어간다.

 

테스트코드중 단골로 쓰는 테스트방식이다. assertThat()으로, 비교할 대상을 설정하고

 

isEqualTo()로 사용자가 생각하는 값을 비교한뒤 그게 맞는지 검사하는 테스트다.

 

예를들어, 내가 10만원 상품의 가격을 Discount메소드로  10% 할인을 적용한값 Value값을 테스트하려면,

 

Value값은 9만원이 나와야할걸 개발자 입장은 알고있으니,

 

Assertions.assertThat(Value).isEqualTo(90000); 

 

을 입력하면 테스트가 통과하는걸 볼수있을것이다.

 

//여담으로 assertThat.isSameAs와 매우비슷한 형태다.

isSameAs는 참조하는값이 같은지를 비교하고, isEqualTo는 원시값이 같은지를 비교한다. 

 

 

assertThat의 강점은 

오류가 났을때 기대값과 실제값을 둘 다 보여줘서 뭐가 틀린지 명확하게 보여줘서 오류 찾는 시간을 단축시킨다.

 

Assertions.assertThat(??).isInstanceOf(??);

이 Assertions는 org.assertj.core.api.Assertions 클래스다 실수하지말자.  assertThat메소드가 여기에들어있다.

 

?? 안에는 타입형 객체가 들어간다.

 

이 메소드는,  assertThat으로 테스트할 대상을 넣고, isInstanceOf는 앞의 테스트대상의 인스턴스니? 를 뭍는다.

앞에 자식이될 요소를, 뒤에는 부모가되는 요소를 넣는다.

 

즉, 참조나 상속을받고있니? 를 뭍고있다.

 

예를들어, 동물 클래스인 Animal과, 동물클래스를 상속또는 참조받는 포유류 클래스인 mammalia가 있다면,

 

Assertions.assertThat(mamalia).isInstanceOf(Animal); 

을 입력하면 테스트가 통과하는거러 볼 수 있을것이다.

 

이 메소드는, 상속관계를 사용하여 테스트할때 쓰는 코드다. 빈 조회할때 쓸수있다.

 

 

Assertions.assertThrows(에러클래스,에러 발생);

 

이 Assertions는 org.junit.jupiter.api.Assertions 클래스다 실수하지말자.  assertThrows메소드가 여기에들어있다.

 

이 메소드는, 일부러 오류를 발생시켜서 테스트하는 코드다.

 

회원이 조회가 안대거나, 문자가 들어와야하는데 숫자가 들어간다거나 같은 예외처리 테스트코드다.

 

이 메소드를 쓰는이유는, 무조건 올바르게 돌아가는 테스트뿐만 아닌, 예외가 들어와서

오류가 제대로 나오는지 테스트하기 위함이다.

 

생각해 보자, 내 학교성적 등급이 A로 나와야하는데 실수로 93을 입력했다.

보통 여기서 에러처리가 나와야하는데, 에러를 못잡고 그대로 93이 입력되는 경우가 생길것이다.

 

물론, 이런일이 없도록 잘 코딩해야하지만, 혹시나 잘못넣은값이 제대로 에러를 띄우는지 확인하는것도 중요하니 쓴다.

 

사용방법은, assertThrows 첫번째인자에 에러를, 두번째인자에 에러 발생요소를 넣으면된다.

 

제대로 에러가뜨면 True를 반환한다.

 

반응형