메모장

블로그 이미지

동팡

https://github.com/ehdvudee

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
Posted by 동팡
블로그 이미지

https://github.com/ehdvudee

by 동팡

공지사항

    최근...

  • 포스트
  • 댓글
  • 트랙백
  • 더 보기

태그

  • 책리뷰
  • Secret Sharing 이론
  • 네이버 클라우드 이직
  • 개발자 책리뷰
  • 이직 정보 공유
  • vault 개요
  • vault
  • 하시콥 볼트
  • 경력 채용
  • 글쓰기 가이드
  • 네이버 클라우드 개발자 면접
  • Thread-safe
  • Secret Sharing
  • vault tutorial
  • 이직 느낀점
  • Hashicorp
  • 개발자 글쓰기 책
  • NBP
  • Spring
  • 네이버 비즈니스 플랫폼
  • What is Vault
  • LoRaWA
  • 간단리뷰
  • java
  • 개발자 준비
  • 개발자 이직
  • 네이버 클라우드
  • 자바
  • Shamir Secret Sharing
  • 볼트란

글 보관함

«   2026/01   »
일 월 화 수 목 금 토
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

링크

카테고리

메모장 (73)
개발관련 (71)
삽질 (26)
(과거)메모 (27)
강의 (0)
회고 (9)
책 리뷰 (9)
블로그 관리 글(비공개) (0)
일상 (2)
기타 (0)
책 리뷰 (1)
회고 (0)

카운터

Total
Today
Yesterday
방명록 : 관리자 : 글쓰기
동팡's Blog is powered by daumkakao
Skin info material T Mark3 by 뭐하라
favicon

메모장

https://github.com/ehdvudee

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • 메모장 (73)
    • 개발관련 (71)
      • 삽질 (26)
      • (과거)메모 (27)
      • 강의 (0)
      • 회고 (9)
      • 책 리뷰 (9)
    • 블로그 관리 글(비공개) (0)
    • 일상 (2)
      • 기타 (0)
      • 책 리뷰 (1)
      • 회고 (0)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바