[JUnit 5] 기본 테스트





기본 Assertions

개요

주요 메서드 종류

  • assertEquals(expected, actual)
  • assertNotNull(actual)
  • assertTrue(boolean)
  • assertAll(executables...)
  • assertThrows(expectedType, executable)
  • assertTimeout(duration, executable)

executable 은 람다식으로 생각할 수 있다.


테스트 실패시 출력할 Message

  • 각 메서드의 마지막 매개변수에 테스트 실패시 출력할 message를 전달할 수 있다.
  • 복잡한 메시지를 생성해야 하는 경우, Supplier<String> 을 사용하면 효율적이다.
    • 문자열 연산자 + 를 사용하여 msg 만들기
      • 테스트 실패 여부와 상관없이 무조건 msg에 대해 연산을 수행한다.
    • Supplier<String> 을 사용하여 msg 만들기
      • 테스트 실패시에만 연산된다. (람다식을 이용하므로)
      • 따라서, 실패 msg가 필요할 때만 msg에 대해 연산을 수행한다.
  • Supplier<String> 사용 예시

      assertEquals("A", 객체.getName(), Supplier<String>() {
      	@Override
      	public String get() {
      		//복잡한 문자열 계산 로직
      		return "복잡한 문자열";
      	}
      })
    


예시 코드 도메인

  • 이제부터 설명할 예제 코드에 대한 전제조건은 이전 게시글을 참고하면 된다.



assertEquals 메서드

메서드 형식

assertEquals(기대하는값, 실제값)

기능

  • ‘기대하는값’ 과 ‘실제값’ 이 동일한 값을 갖는지 확인한다.
  • 서로 다른 값이라면, 테스트에 실패한다.
  • 완벽히 동일한 객체, 즉 주소값이 같은 객체인지 확인하려면 assertSame() 을 사용해야 한다.

예시 코드

//import 생략

class StudyTest {
	
	@Test
  void create() {
    Study study = new Study(10);
		assertEquals(StudyStatus.DRAFT, study.getStudyStatus(), new Supplier<String>() {
				@Override
				public String get() {
					return "study 객체 생성시, 상태는 DRAFT이어야 한다.";
				}
    );
	}
 
}



assertNotNull 메서드

메서드 형식

assertNotNull(실제값)


기능

  • ‘실제값’ 이 null 이 아닌지 확인한다.
  • null이라면, 테스트에 실패한다.


예시 코드

//import 생략

class StudyTest {
	
	@Test
  void create() {
    Study study = new Study(10);
		assertNotNull(study);
	}
 
}



assertThrows 메서드

메서드 형식

assertThrows(예외클래스.class, () -> {예외가 발생하는 코드})


기능

  • 람다식이 해당 예외클래스를 던지면 테스트가 성공한다.
  • 람다식이 해당 예외클래스를 던지지 않으면, 테스트가 실패한다.


예시 코드

//import 생략

class StudyTest {
	
	@Test
  void create() {
			assertThrows(RuntimeException.class, () -> {
				//RuntimeException이 발생하는 코드
			});
	}
 
}



assertAll 메서드

메서드 형식

assertAll( () -> assert문_1,
			() -> assert문_2,
			() -> assert문_3, ...)


기능

  • 매개변수로 전달한 assert문들을 모두 수행한다.
  • assertAll을 사용하지 않고 여러 assert 문 수행시
    • 어떤 assert 문이 실패하면 나머지 assert 문이 수행되지 않는다.
  • assertAll을 사용하여 여러 assert 문 수행시
    • 어떤 assert 문이 실패해도 나머지 assert 문이 수행된다.


예시 코드

//import 생략

class StudyTest {
	
	@Test
  void create() {
    Study study = new Study(10);

		assertAll(
            () -> assertNotNull(study),
            () -> assertEquals(StudyStatus.DRAFT, study.getStudyStatus(), new Supplier<String>() {
                @Override
                public String get() {
                    return "study 객체 생성시, 상태는 DRAFT이어야 한다.";
                }
            }),
            () -> assertTrue(study.getLimit() > 0, "study 객체의 limit 값은 0보다 커야한다.")
		);
	}
 
}




  • 본 게시글은 백기선님의 강의를 토대로 정리한 글입니다.
  • 더 자세한 내용을 알고 싶으신 분들이 계신다면, 해당 강의를 수강하시는 것을 추천드립니다.