프로그래밍 언어/Kotlin

[JUnit] assert 함수 종류

Julie825 2022. 10. 5. 20:22

기댓값의 자료형에 따라 어떤 assert 함수를 사용해야 하는지 알아보자.

 

assertEquals(expected, actual, message)
assertNotEquals(expected, actual, message)

Java 기준 primitive 자료형(Object, char, byte, double, float, int, long, short )을 비교한다.

kotlin 기준으로 설명하면, equals( )를 상속한 클래스의 인스턴스, String, Numbers를 비교할 수 있다.

message에는 String과 Supplier<String>을 넣을 수 있다.

 

assertSame(expected, actual, message)
assertNotSame(unexpected, actual, message)

두 객체의 참조 위치가 같은지 확인할 때 사용한다.

expected, actual의 타입은 최상위 클래스 Object로 선언되어 무엇이든 들어갈 수 있다.

message 위치에는 String 또는 Supplier<String>을 넣을 수 있다.

 

assertFalse(value, message)
assertTrue(value, String message)

각각 결과가 False, True이기를 기대할 때 사용한다.

value 위치에는 boolean 또는 BooleanSupplier,

message 위치에는 String 또는 Supplier<String>을 넣을 수 있다.

 

assertNull(value, message)
assertNotNull(value, message)

각각 value가 Null이기를 기대할 때, 또는 Null이 아니기를 기대할 때 사용한다.

value 위치에는 무엇이든 넣을 수 있다. (Java 최상위 클래스인 Object가 인풋으로 설정됨)

message 위치에는 String 또는 Supplier<String>을 넣을 수 있다.

 

assertLinesMatch(List<String> expectedLines, List<String> actualLines)

오직 List<String>을 비교하기 위한 함수.

message를 입력받지 않는다.

 

assertThrows(expectedType, executable, message)

함수 등을 호출했을 때 expectedType과 일치하는 exception을 발생시키는지 확인한다.

message 위치에는 String 또는 Supplier<String>을 넣을 수 있다.

 

assertTimeout(Duration timeout, executable, message)
assertTimeoutPreemptively(Duration timeout, executable, message)

함수 등이 제한 시간 내에 동작하는지 확인한다.

Duration 타입으로 제한시간을 지정한다. 상단에 import java.time.Duration 를 추가해야한다.

ex) Duration.ofMillis(3_000L)

executable에서는 함수를 호출하거나, ThrowingSupplier를 넘길 수 있다.

message 위치에는 String 또는 Supplier<String>을 넣을 수 있다.

 

 💡 assertTimeout vs assertTimeoutPreemptively [참고자료]

Timeout이 발생했을 때 둘은 다른 행동을 취한다. 일반 timeout은 해당 함수 실행이 끝날 때 까지 기다리지만, Preemptively는 타임아웃이 끝나면 바로 리소스 해제를 시작해서 해당 작업을 마무리시킨다.

함수가 꼭 마무리되어야 하는 경우에는 일반 timeout을, 테스트 시간을 절약하고 싶은 경우에는 Preemptive timeout을 사용하자.

 

assertIterableEquals(Iterable<?> expected, Iterable<?> actual, message)

for loop 없이 Iterable을 비교한다. message 위치에는 String 또는 Supplier<String>을 넣을 수 있다.


참고한 자료

JUnit 공식문서 : https://junit.org/junit5/docs/5.0.1/api/org/junit/jupiter/api/Assertions.html