JUnit과 함께하는 AssertJ
개발관련/(과거)메모
2019. 11. 12. 11:14
상황
- JUnit을 통한 단위테스트 작성
- 기능 검증을 해야함(예외 검증은 안함)
Given-When-Then
- 단위 테스트할 때 많이 사용되는 테스트 패턴
- 코드의 가독성을 높임
- Given
==> 테스트 시나리오를 시작하기 전에 초기화 절차(pre-conditions, 사전 절차)
- When
==> 테스트 시나리오의 실제 작업(테스트)
- Then
==> 테스트 시나리오에 대한 예상 결과(검증 절차)
EX-01(코드 설명은 AssertJ 절에 있음)
// GIVEN
final String uuid = "fc8833de-70d2-4ece-b063-fede3a3c59fe";
// WHEN
ArrayList<Byte> reqCreatePacket = reqCreate();
ArrayList<Byte> respCreatePacket = respCreate( uuid );
ArrayList<Byte> reqDestroyPacket = reqDestroy( uuid );
ArrayList<Byte> respDestroyPacket= respDestroy( uuid );
// TEHN
KMIPDecoder decoder = new KMIPDecoder();
KMIPContainer container;
container = decoder.decodeRequest( reqCreatePacket );
assertThat( container.getBatch( 0 ).getTemplateAttributeStructure( 0 ).getAttributes() )
.isNotEmpty()
.hasSize( 3 )
.extracting( "class" )
.contains( CryptographicAlgorithm.class, CryptographicLength.class, CryptographicUsageMask.class );
container = decoder.decodeResponse( respCreatePacket );
assertThat( container.getBatch( 0 ).getAttributes() )
.isNotEmpty()
.hasSize(2)
.extracting( "class" )
.contains( ObjectType.class, UniqueIdentifier.class );
assertThat( container.getBatch( 0 ).getResultStatus().getValue() )
.isEqualTo( EnumResultStatus.Success );
container = decoder.decodeRequest( reqDestroyPacket );
assertThat( container.getBatch( 0 ).getOperation().getValue() )
.isEqualTo(EnumOperation.Destroy );
assertThat( container.getBatch( 0 ).getAttributes() )
.hasSize( 1 )
.extracting( "class" )
.contains( UniqueIdentifier.class );
container = decoder.decodeResponse( respDestroyPacket );
assertThat( container.getBatch( 0 ).getResultStatus().getValue() )
.isEqualTo( EnumResultStatus.Success );
assertThat( container.getBatch( 0 ).getAttributes() )
.hasSize( 1 )
.extracting( "class" )
.contains( UniqueIdentifier.class );
AssertJ의 사용
사용 이유
- JUnit 기본 제공 Assert 개불편함.
사용 방법
pom.xml
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>1.7.1</version>
<scope>test</scope>
</dependency>
</dependencies>
Code
import static org.assertj.core.api.Assertions.assertThat;
assertThat( [$값] ).[$값을 검증하기위한 메소드들]
지금 사용하는 버전은 Java6을 지원하기 위해 낮은 버전을 선택했다.
현재 3? 버전까지 나온것으로 기억ㅎ마
메소드 이름이 직관적이라서 눈으로 보면 대강 코드 흐름을 읽을 수 있다.
ArrayList 검증하면서 주의해야할 것은 하나였던 것 같다.
- ArrayList의 요소 검증 즉, Contains의 검증은 Object Equals 메소드를 통해 검증을한다.
- 제대로된 Contains을 검증하기 위해서는 Object의 Equals 메소드를 오버라이딩해야한다(Object Equals 오버라이딩 주의사항도 지키구..;).
- String 이외 primitive type은 상관없는 것 같다.
활용
AssertJ를 통해 기능의 가지 검증과 예외 검증을 할 수 있다.
해당 사항을 시나리오별 차곡차곡 모아두면 결국 통합테스트를 구현할 수 있다.
'개발관련 > (과거)메모' 카테고리의 다른 글
Java에서 HTTPS 좀 알고 구성해보자.. (0) | 2020.04.06 |
---|---|
Docker PostgreSQL 볼륨 매핑 권한 문제 without root (0) | 2020.03.18 |
Hashed Data RSA 서명할 때 주의사항 (0) | 2019.10.01 |
스프링 빈과 Thread-Safe (0) | 2019.10.01 |
mybatis- "IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String (2) | 2019.06.28 |