Assert
Assert는 테스트 중 특정 조건이 참인지 확인하는 데 사용됩니다. 조건이 만족되지 않으면 예외를 발생시켜 테스트를 실패로 처리합니다. Java에서는 다양한 Assert 클래스를 사용하여 테스트 조건을 확인할 수 있습니다.
1. 주요 Assert 클래스
1) JUnit의 Assertions (JUnit 5 기준)
JUnit의 Assertions 클래스는 단위 테스트에서 가장 널리 사용됩니다.
- 주요 메서드:
- assertEquals(expected, actual): 기대값과 실제값이 같은지 확인.
- assertNotEquals(unexpected, actual): 값이 같지 않은지 확인.
- assertTrue(condition): 조건이 참인지 확인.
- assertFalse(condition): 조건이 거짓인지 확인.
- assertNull(object): 객체가 null인지 확인.
- assertNotNull(object): 객체가 null이 아닌지 확인.
- assertThrows(exceptionClass, executable): 특정 예외가 발생하는지 확인.
사용 예제
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class AssertionsTest {
@Test
void testAssertions() {
// assertEquals
assertEquals(4, 2 + 2, "Sum should be 4");
// assertTrue
assertTrue(5 > 1, "5 should be greater than 1");
// assertNull
String str = null;
assertNull(str, "String should be null");
// assertThrows
assertThrows(ArithmeticException.class, () -> {
int result = 1 / 0; // throws ArithmeticException
});
}
}
2) Spring의 Assert
Spring Framework는 Assert 클래스를 제공하여 런타임 시점에 조건을 검증합니다. 주로 예외 발생을 통해 조건이 만족되지 않을 때 오류를 처리합니다.
- 주요 메서드:
- Assert.isTrue(condition, message): 조건이 참인지 확인.
- Assert.notNull(object, message): 객체가 null이 아닌지 확인.
- Assert.hasText(string, message): 문자열이 null, 빈 문자열, 공백 문자열이 아닌지 확인.
- Assert.isInstanceOf(type, obj, message): 객체가 특정 클래스의 인스턴스인지 확인.
사용 예제
import org.springframework.util.Assert;
public class SpringAssertExample {
public void process(String input) {
Assert.hasText(input, "Input cannot be null or empty");
Assert.isTrue(input.length() > 5, "Input length must be greater than 5");
System.out.println("Input is valid: " + input);
}
}
3) Java의 assert 키워드
Java는 자체적으로 assert 키워드를 제공합니다. 디버깅 목적으로만 사용되며, 런타임 시 JVM 옵션에 따라 작동 여부가 결정됩니다.
- 기본적으로 비활성화되어 있으며, -ea(enable assertions) 옵션을 추가해야 실행됩니다.
사용 예제
public class JavaAssertExample {
public static void main(String[] args) {
int x = -5;
assert x > 0 : "x must be positive";
System.out.println("x is " + x);
}
}
실행 방법
java -ea JavaAssertExample
2. 사용 사례
1) 단위 테스트 (JUnit Assertions)
단위 테스트에서 기대값과 실제값이 같은지 확인하거나, 특정 조건을 만족하는지 검증할 때 사용합니다.
예제: 사용자 정보 검증
@Test
void testUserAge() {
int age = 25;
assertTrue(age > 18, "User must be an adult");
}
2) 런타임 검증 (Spring Assert)
런타임에 입력값 검증이나 비즈니스 로직의 조건을 확인하는 데 사용됩니다.
예제: 입력값 검증
public void saveUser(String username) {
Assert.hasText(username, "Username must not be empty");
System.out.println("User saved: " + username);
}
3) 디버깅 (Java assert)
디버깅 중 조건을 확인하여 잘못된 값에 대해 알림을 받습니다.
예제: 배열 크기 검증
public void processArray(int[] arr) {
assert arr.length > 0 : "Array must not be empty";
System.out.println("Processing array of size: " + arr.length);
}
3. Spring의 Assert와 JUnit Assertions의 차이
기능Spring AssertJUnit Assertions
목적 | 런타임 검증 | 단위 테스트 검증 |
종속성 | Spring Framework | JUnit Framework |
예외 처리 방식 | 런타임 예외 (IllegalArgumentException) 발생 | 테스트 실패로 처리 |
용도 | 입력값 검증, 비즈니스 로직 | 단위 테스트 조건 검증 |
4. Assert를 사용할 때의 주의점
- Spring Assert:
- 런타임 검증에 적합하며, 서비스 레이어나 비즈니스 로직에서 사용.
- 메시지를 제공하여 예외 발생 시 명확한 원인을 알릴 수 있도록 작성.
- JUnit Assertions:
- 테스트 코드에서만 사용.
- 메시지를 잘 작성하면 디버깅이 용이.
- Java assert:
- 디버깅 목적으로만 사용하며, 상용 환경에서는 비활성화하는 것이 일반적.
5. 실무에서의 활용
- Spring 프로젝트:
- 비즈니스 로직의 사전 조건을 검증하기 위해 Spring의 Assert를 주로 사용.
- 테스트 코드:
- JUnit의 Assertions를 사용하여 예상 동작과 실제 동작이 일치하는지 확인.
- 디버깅:
- Java의 assert를 통해 테스트 중간 조건을 확인.
요약:
Assert는 조건 검증을 통해 코드의 안정성을 높이는 도구입니다. Spring의 Assert는 런타임 검증, JUnit의 Assertions는 테스트 조건 검증, Java의 assert는 디버깅 목적으로 각각 사용됩니다.
반응형
'서버&백엔드 > 🔥 JAVA' 카테고리의 다른 글
JAVA | var 이란? (0) | 2024.12.22 |
---|---|
JAVA | TDD API 테스트 & 리팩토링 (2) | 2024.12.20 |
JAVA | enum사용법 (0) | 2024.12.19 |
의존성 역전 원칙 (DIP) (0) | 2024.12.19 |
JAVA | TDD예제를 통한 어댑터 패턴 설명 (0) | 2024.12.19 |