CodeGym /Java Blog /무작위의 /자바 어설션
John Squirrels
레벨 41
San Francisco

자바 어설션

무작위의 그룹에 게시되었습니다
Assert 문 Java에서는 실행 중 프로그램 상태에 대한 특정 가정을 테스트하는 데 사용됩니다. 이는 오류를 쉽게 감지하고 프로그램을 디버깅하는 데 도움이 됩니다. Java의 어설션 문은 Java Assert 키워드와 부울 표현식을 사용하여 작성됩니다. 표현식이 true로 평가되면 어설션은 자동으로 전달되고 프로그램은 해당 작업을 수행합니다. false로 평가되면 어설션이 실패하고 AssertionError 가 발생합니다. Java 어설션이 포함된 프로그램의 예를 살펴보겠습니다.
//Assertion in Java example
public class AssertDemo1 {
   public static void main(String[] args) {
       int x = 5;
       assert x == 5 : "x should be 5";
       System.out.println(x);
   }
}
여기서 표현식은 true이므로 프로그램은 작업을 계속합니다. 출력은 예상한 대로입니다.
5

AssertionError 예

Java에서 AssertionError 는 Error 클래스 의 하위 클래스 이며 어설션이 실패할 때 발생합니다. Java의 어설션은 일반적으로 전제 조건, 사후 조건 또는 불변이 참인지 확인하는 데 사용됩니다. 아래에서 말했듯이, 주장문이 true로 평가되지 않으면 AssertionError가 발생합니다. 이제 부울 표현식이 거짓이 되도록 프로그램을 다시 작성해 보겠습니다.
//AssertionError example
public class AssertDemo1 {
   public static void main(String[] args) {
       int x = 5;
       assert x == 7 : "x should be 7";
       //here should be AssertionError
       System.out.println(x);
   }
}
글쎄, 우리는 그것을 실행하고 출력은…
5
우리의 예에서는 확실히 뭔가 잘못되었습니다! 여기서는 x가 5이고 어설션에서는 x가 7일 것으로 예상하므로 여기에 AssertionError 가 있어야 합니다. 여기서 무엇이 문제인가요? Java 어설션은 JVM에서 비활성화될 수 있으므로 프로그램에서 오류를 확인하는 유일한 수단으로 사용되어서는 안 된다는 점을 기억하는 것이 중요합니다. 디버깅 및 테스트에 유용하지만 프로덕션 코드에 의존해서는 안 됩니다. 따라서 어설션을 사용하려면 vm -ea(또는 -enableassertions) 옵션을 사용하여 이를 활성화해야 합니다. 명령줄로 작업하는 경우 프로그램 AssertDemo1에 다음 명령을 사용할 수 있습니다.
java -ea AssertDemo1
어설션을 활성화하고 동일한 프로그램을 다시 실행하면 다음을 얻게 됩니다.
스레드 "main" java.lang.AssertionError의 예외: x는 AssertDemo1.main(AssertDemo1.java:4)에서 7이어야 합니다.
그게 요점입니다.

IntelliJ IDEA에서 예외를 활성화하는 방법

  1. 실행 메뉴 → 구성 편집...으로 이동합니다.
  2. VM 옵션 줄에 -ea 매개변수를 입력합니다.
Java 어설션 - 1이제 어설션이 활성화되어 사용할 수 있습니다.

Java의 단위 테스트에 대한 어설션

Java에서 단위 테스트는 개별 코드 모듈을 테스트하여 올바르게 작동하는지 확인하는 기술입니다. 어설션은 테스트된 코드가 예상대로 작동하는지 확인하기 위해 Java의 단위 테스트에서 일반적으로 사용됩니다. 단위 테스트에서는 코드 단위(예: 특정 메서드)를 개별적으로 테스트하여 다양한 조건 및 입력에서 올바르게 작동하는지 확인합니다. 예를 들어 보겠습니다. 여기에 2차 정수의 덧셈, 뺄셈, 곱셈, 나눗셈을 위한 간단한 계산기가 있습니다.
public class MyMath {

   public static int add (int a, int b) {
       return a + b;
   }

   public static int sub (int a, int b) {
       return a - b;
   }

   public static int mult (int a, int b) {
       return a*b;
   }

   public static double div (int a, int b) {
       return a/b;
   }
}
물론 이 구현에 대해 많은 질문이 있지만(예를 들어 가장 큰 int를 다른 숫자에 추가하면 어떻게 됩니까?) 지금은 이 구현을 그대로 두겠습니다. 이제 단위 테스트를 사용하여 myMath 클래스 의 메서드를 테스트할 클래스를 작성해 보겠습니다 . 사실, 그 중 두 개만 있습니다. 실제로 인수의 유효성, 메소드가 특수 사례를 처리하는지 여부 등을 확인하는 테스트를 작성할 수 있습니다. 그러나 여기서는 데모 목적으로 몇 가지 테스트만 수행하겠습니다.
import org.junit.Test;

import static org.junit.Assert.assertEquals;

public class MyMathTesting {
   @Test
   public void testAdd() {
       MyMath calculator = new MyMath();
       int sum = calculator.add(2, 3);
       assertEquals(5, sum);
   }

   @Test
   public void testSub() {
       MyMath calculator = new MyMath();
       int sub = calculator.sub(5, 2);
       assertEquals(3, sub);
   }

}
AssertEquals 메소드 두 값이 같은지 확인하는 어설션입니다. 값이 동일하지 않으면 AssertionError 가 발생하여 테스트가 실패했음을 나타냅니다. 단위 테스트에서 어설션을 사용하면 버그를 발견하고 코드가 다양한 조건 및 입력에서 올바르게 작동하는지 확인하는 데 도움이 됩니다. 나눗셈과 곱셈에 대한 테스트를 직접 추가해 보세요. 어렵지 않습니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION