JUnit에서 NullPointerException을 테스트하는 방법은?
_____A1: JUnit에서는 특정 코드가 NullPointerException을 던지는지 확인하기 위해 `assertThrows` 메서드를 사용할 수 있습니다. 예를 들어:
```java
@Test
void testNullPointerException() {
assertThrows(NullPointerException.class, () -> {
// NullPointerException을 일으키는 코드
String str = null;
str.length();
});
}
```
Q2: JUnit 4에서는 NullPointerException 테스트를 어떻게 작성하나요?
A2: JUnit 4에서는 `@Test` 어노테이션의 `expected` 속성을 사용할 수 있습니다. 예:
```java
@Test(expected = NullPointerException.class)
public void testNullPointerException() {
String str = null;
str.length();
}
```
Q3: `assertThrows`를 사용할 때 NullPointerException을 잡지 못하면 어떻게 되나요?
A3: `assertThrows`에 지정한 예외가 발생하지 않으면 테스트는 실패합니다. 테스트 메서드 내에서 예외가 발생하지 않거나 다른 예외가 발생하면 `AssertionFailedError`가 발생합니다.
Q4: NullPointerException 발생 지점을 특정하려면 어떻게 해야 하나요?
A4: `assertThrows`는 반환값으로 발생한 예외 객체를 돌려주므로, 추가 검증이 가능합니다. 예:
@Test
void testNullPointerExceptionMessage() {
NullPointerException ex = assertThrows(NullPointerException.class, () -> {
String str = null;
str.length();
});
assertEquals("some expected message", ex.getMessage());
}
```
Q5: NullPointerException을 기대하는 이유를 명확히 할 수 있나요?
A5: 테스트 이름과 주석으로 기대하는 이유를 명확히 하는 것이 좋습니다. 또한, `assertThrows`를 사용해 예상되는 동작을 정확히 검증하는 것이 모호함을 줄입니다.
Q6: NullPointerException을 막는 방법을 테스트하는 경우도 있나요?
A6: 네, 예외가 발생하지 않는지 확인하는 테스트도 중요합니다. 예상한 동작대로 예외가 발생하지 않아야 할 경우 `assertDoesNotThrow`를 사용할 수 있습니다. (JUnit 5부터 지원)
```java
@Test
void testNoNullPointerException() {
assertDoesNotThrow(() -> {
String str = "not null";
int len = str.length();
});
}
```
---
요약: JUnit 5에서는 `assertThrows(NullPointerException.class, executable)`를, JUnit 4에서는 `@Test(expected = NullPointerException.class)`를 사용하여 NullPointerException 발생 여부를 테스트할 수 있습니다.
JUnit 버전에 따라 약간씩 방법이 다를 수 있지만, 대표적으로 JUnit 4와 JUnit 5에서의 방법을 소개합니다.
1. JUnit 4에서 `NullPointerException` 테스트하기 방법 1: `@Test` 애노테이션의 `expected` 속성 사용 JUnit 4에서는 `@Test` 애노테이션에 `expected` 속성을 지정해서 특정 예외가 발생하는지 쉽게 테스트할 수 있습니다.
```java @Test(expected = NullPointerException.class) public void testNullPointerException() { Object obj = null; obj.toString(); // NullPointerException 발생 } ``` 설명: - 이 테스트는 `NullPointerException`이 발생할 때만 통과합니다.
- 예외가 발생하지 않거나 다른 예외가 발생하면 실패합니다.
방법 2: `try-catch` 문 사용하기 더 세밀한 검증이 필요하면 `try-catch`를 직접 사용해서 예외 메시지 등도 확인할 수 있습니다.
```java @Test public void testNullPointerExceptionWithMessage() { try { Object obj = null; obj.toString(); fail("Expected NullPointerException to be thrown"); } catch (NullPointerException e) { assertEquals("some expected message", e.getMessage()); } } ``` 설명: - `fail()` 메서드는 예외가 발생하지 않았을 때 테스트가 실패하도록 합니다.
- 예외가 던져지면 메시지나 상태를 추가로 확인할 수 있습니다.
---
2. JUnit 5에서 `NullPointerException` 테스트하기 JUnit 5에서는 `Assertions.assertThrows()` 메서드를 활용하는 것이 일반적입니다.
```java import static org.junit.jupiter.api.Assertions.assertThrows; @Test public void testNullPointerException() { assertThrows(NullPointerException.class, () -> { Object obj = null; obj.toString(); }); } ``` 설명: - `assertThrows`는 람다 표현식 내에서 지정한 예외가 발생하는지를 검사합니다.
- 예외가 발생하지 않으면 테스트 실패. - 추가로 `assertThrows`는 발생한 예외 객체를 반환하므로, 메시지 확인 등 후속 검증도 가능합니다.
```java @Test public void testNullPointerExceptionMessage() { NullPointerException thrown = assertThrows(NullPointerException.class, () -> { Object obj = null; obj.toString(); }); assertEquals(null, thrown.getMessage()); // 실제 메시지 확인 } ``` --- 요약 - JUnit 4 : `@Test(expected = NullPointerException.class)`가 가장 간단하며, 필요 시 `try-catch`로 예외 메시지 검증 가능.
- JUnit 5 : `assertThrows(NullPointerException.class, () -> { ... })`를 주로 사용하며, 예외 메시지 등 상세 검증 가능.
이 방법들을 통해 테스트 코드에서 `NullPointerException`이 의도한 대로 발생하는지를 정확히 확인할 수 있습니다.
작성자:
김유리 [비회원]
| 작성일자: 1년 전
2025-05-26 02:51:24
조회수: 153 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 153 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.