250x250
반응형
Recent Posts
Recent Comments
Link
«   2024/07   »
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
Archives
Today
Total
관리 메뉴

재 현

JUnit 4와 JUnit 5에서 제공하는 Assertions(번역) 본문

Development

JUnit 4와 JUnit 5에서 제공하는 Assertions(번역)

본명은이점례 2023. 11. 1. 20:00
728x90

https://www.baeldung.com/junit-assertions (번역)

 

모아보기)

  • assertEquals(Object expected, Object actual) : expected 의 값이 actual 일 때 성공합니다.
  • assertNotEquals(Object unexpected, Object actual) : unpxpected 의 값이 actual 이 아닐 때 성공합니다.
  • assertTrue(boolean condition) : condition 값이 True 값일 때 성공합니다.
  • assertFalse(boolean condition) : condition 값이 False 값일 때 성공합니다.
  • assertNull(Object actual) : actual 의 값이 Null 일 때 성공합니다.
  • assertNotNull(Object actual) : actual 의 값이 Null 이 아닐 때 성공합니다.
  • assertThrows(ArithmeticException.class, () -> 메소드) : 해당 코드가 특정 예외를 발생하면 성공합니다.
  • assertDoesNotThrow(() -> 메소드) : 어떠한 예외도 반환하지 않았다면 성공합니다.

 

예시)

3.1. assertEquals

assertEquals 단언문은 예상 값과 실제 값이 동일한지 확인합니다.

@Test
public void whenAssertingEquality_thenEqual() {
    String expected = "Baeldung";
    String actual = "Baeldung";

    assertEquals(expected, actual);
}

실패 시 표시할 메시지를 지정하는 것도 가능합니다.

assertEquals("failure - strings are not equal", expected, actual);

3.2. assertArrayEquals

두 배열이 동일한지 확인하려면 assertArrayEquals를 사용할 수 있습니다.

@Test
public void whenAssertingArraysEquality_thenEqual() {
    char[] expected = {'J','u','n','i','t'};
    char[] actual = "Junit".toCharArray();

    assertArrayEquals(expected, actual);
}

두 배열이 모두 null인 경우, 단언문은 이들을 동일한 것으로 간주합니다.

@Test
public void givenNullArrays_whenAssertingArraysEquality_thenEqual() {
    int[] expected = null;
    int[] actual = null;

    assertArrayEquals(expected, actual);
}

3.3. assertNotNull와 assertNull

객체가 null인지 테스트하려면 assertNull 단언문을 사용할 수 있습니다.

@Test
public void whenAssertingNull_thenTrue() {
    Object car = null;

    assertNull("The car should be null", car);
}

반대로, 객체가 null이 아니어야 한다는 것을 확인하려면 assertNotNull 단언문을 사용할 수 있습니다.

3.4. assertNotSame와 assertSame

assertNotSame을 사용하여 두 변수가 동일한 객체를 참조하지 않는지 확인할 수 있습니다.

@Test
public void whenAssertingNotSameObject_thenDifferent() {
    Object cat = new Object();
    Object dog = new Object();

    assertNotSame(cat, dog);
}

같은 객체를 참조해야 하는 경우 assertSame 단언문을 사용할 수 있습니다.

3.5. assertTrue와 assertFalse

특정 조건이 true 또는 false인지 확인하려면 각각 assertTrue 또는 assertFalse 단언문을 사용할 수 있습니다.

@Test
public void whenAssertingConditions_thenVerified() {
    assertTrue("5 is greater then 4", 5 > 4);
    assertFalse("5 is not greater then 6", 5 > 6);
}

3.6. fail

fail 단언문은 AssertionFailedError를 throw하여 테스트를 실패시킵니다. 이를 사용하여 실제 예외가 발생하는지 확인하거나 테스트를 개발 중에 실패시키는 데 사용할 수 있습니다.

첫 번째 시나리오에서 어떻게 사용하는지 살펴보겠습니다.

@Test
public void whenCheckingExceptionMessage_thenEqual() {
    try {
        methodThatShouldThrowException();
        fail("Exception not thrown");
    } catch (UnsupportedOperationException e) {
        assertEquals("Operation Not Supported", e.getMessage());
    }
}

3.7. assertThat

assertThat 단언문은 JUnit 4에서 다른 단언문과는 달리 매개 변수의 순서가 반대입니다. 이 단언문은 선택적인 실패 메시지, 실제 값 및 Matcher 객체를 가지고 있습니다.

다음은 배열이 특정 값을 포함하는지 확인하기 위해 이 단언문을 어떻게 사용하는지 보여줍니다.

@Test
public void testAssertThatHasItems() {
    assertThat(
      Arrays.asList("Java", "Kotlin", "Scala"),
      hasItems("Java", "Kotlin"));
}

Matcher 객체와 함께 assertThat 단언문을 사용하는 방법에 대한 자세한 내용은 Testing with Hamcrest에서 확인할 수 있습니다.

JUnit 5 Assertions(단언문)

4.1. assertArrayEquals

assertArrayEquals 단언문은 예상 값과 실제 배열이 동일한지 확인합니다.

@Test
public void whenAssertingArraysEquality_thenEqual() {
    char[] expected = { 'J', 'u', 'p', 'i', 't', 'e', 'r' };
    char[] actual = "Jupiter".toCharArray();

    assertArrayEquals(expected, actual, "Arrays should be equal");
}

배열이 동일하지 않은 경우 "Arrays should be equal" 메시지가 출력됩니다.

4.2. assertEquals

두 개의 부동 소수점이 동일한지 확인하려면 간단한 assertEquals 단언문을 사용할 수 있습니다.

@Test
void when

AssertingEquality_thenEqual() {
    float square = 2 * 2;
    float rectangle = 2 * 2;

    assertEquals(square, rectangle);
}

그러나 예상 값과 실제 값이 미리 정의된 델타 값에서 다른지 확인하려면 세 번째 매개 변수로 델타 값을 전달하여 assertEquals를 사용할 수 있습니다.

@Test
void whenAssertingEqualityWithDelta_thenEqual() {
    float square = 2 * 2;
    float rectangle = 3 * 2;
    float delta = 2;

    assertEquals(square, rectangle, delta);
}

4.3. assertTrue와 assertFalse

assertTrue 단언문을 사용하면 제공된 조건이 true임을 확인할 수 있습니다.

@Test
void whenAssertingConditions_thenVerified() {
    assertTrue(5 > 4, "5 is greater the 4");
    assertTrue(null == null, "null is equal to null");
}

람다 표현식을 지원하는 덕분에 람다 표현식을 사용하여 조건을 제공하는 대신 BooleanSupplier를 단언문에 전달할 수 있습니다. 다음은 assertFalse 단언문을 사용하여 BooleanSupplier의 정확성을 확인하는 방법을 보여줍니다.

@Test
public void givenBooleanSupplier_whenAssertingCondition_thenVerified() {
    BooleanSupplier condition = () -> 5 > 6;

    assertFalse(condition, "5 is not greater than 6");
}

4.4. assertNull와 assertNotNull

객체가 null이 아니어야 한다는 것을 확인하려면 assertNotNull 단언문을 사용할 수 있습니다.

@Test
void whenAssertingNotNull_thenTrue() {
    Object dog = new Object();

    assertNotNull(dog, () -> "The dog should not be null");
}

반대로, 실제 값이 null인지 확인하려면 assertNull 단언문을 사용할 수 있습니다.

@Test
public void whenAssertingNull_thenTrue() {
    Object cat = null;

    assertNull(cat, () -> "The cat should be null");
}

두 경우 모두 실패 메시지는 지연 방식으로 가져옵니다(Supplier를 통해).

4.5. assertSame와 assertNotSame

예상 값과 실제 값이 동일한 객체를 참조하는지 확인하려면 assertSame 단언문을 사용해야 합니다.

@Test
void whenAssertingSameObject_thenSuccessful() {
    String language = "Java";
    Optional<String> optional = Optional.of(language);

    assertSame(language, optional.get());
}

반대로, 두 변수가 동일한 객체를 참조하지 않아야 하는 경우 assertNotSame를 사용할 수 있습니다.

4.6. fail

fail 단언문은 제공된 실패 메시지와 해당 원인으로 테스트를 실패시킵니다. 이것은 테스트가 완료되지 않았을 때 사용할 수 있습니다.

@Test
public void whenFailingATest_thenFailed() {
    // Test not completed
    fail("FAIL - test not completed");
}

4.7. assertAll

JUnit 5에서 소개된 새로운 단언문 중 하나는 assertAll 입니다.

이 단언문은 그룹화된 단언문을 생성할 수 있어서 모든 단언문을 실행하고 실패 사항을 함께 보고할 수 있습니다. 이 단언문은 MultipleFailureError의 메시지 문자열에 포함될 제목과 Executable의 스트림을 수용합니다.

그룹화된 단언문을 정의하는 방법은 다음과 같습니다.

@Test
void givenMultipleAssertion_whenAssertingAll_thenOK() {
    Object obj = null;
    assertAll(
      "heading",
      () -> assertEquals(4, 2 * 2, "4 is 2 times 2"),
      () -> assertEquals("java", "JAVA".toLowerCase()),
      () -> assertNull(obj, "obj is null")
    );
}

그룹화된 단언문의 실행은 Executable 중 하나가 예외(예: OutOfMemoryError)를 throw할 때만 중단됩니다.

4.8. assertIterableEquals

assertIterableEquals는 예상 값과 실제 iterable이 깊이 동일한지 확인합니다.

두 iterable은 동일한 순서로 동일한 요소를 반환해야하며, 두 iterable이 동일한 유형이 아니어도 괜찮습니다.

이 고려 사항을 고려하여 서로 다른 유형의 두 목록(LinkedList와 ArrayList)이 동일한지 확인하는 방법을 살펴보겠습니다.

@Test
void givenTwoLists_whenAssertingIterables_thenEquals() {
    Iterable<String> al = new ArrayList<>(asList("Java", "Junit", "Test"));
    Iterable<String> ll = new LinkedList<>(asList("Java", "Junit", "Test"));

    assertIterableEquals(al, ll);
}

assertArrayEquals와 마찬가지로 두 iterable이 모두 null인 경우, 이들은 동일한 것으로 간주됩니다.

4.9. assertLinesMatch

assertLinesMatch는 예상 문자열 목록이 실제 목록과 일치하는지 확인합니다.

이 메서드는 assertEquals 및 assertIterableEquals와 다르게 각 예상 및 실제 줄의 경우 다음 알고리즘을 수행합니다.

  • 예상 줄이 실제 줄과 동일한지 확인합니다. 그렇다면 다음 줄로 이동합니다.
  • 예상 줄을 정규 표현식으로 취급하고 String.matches() 메서드를 사용하여 확인합니다. 그렇다면 다음 줄로 이동합니다.
  • 예상 줄이 빠른 전진 마커인지 확인합니다. 그렇다면 빠른 전진을 적용하고 단계 1부터 반복합니다.

 

 

참고


https://velog.io/@tjseocld/JUnit5-%EA%B8%B0%EB%B3%B8-%EC%82%AC%EC%9A%A9%EB%B2%95

https://www.baeldung.com/junit-assertions

728x90