JUnit의 장애와 오류의 차이점은 무엇입니까?
대규모 코드 베이스에서 JUnit 테스트를 실행하고 있는데, "Errors(오류)"가 표시될 때도 있고 "Failures(실패)"가 나타날 때도 있다는 것을 깨닫고 있습니다.뭐가 다른데?
장애는when your test cases fail- 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 맞다.
오류는when unexpected errors/exceptions occur할 때 치 않은 「 」 「 」 「 」 「 File Not Found 」 「 」 「 」 「 File Not Found 」 등입니다.
테스트에서 Junit의 Assertion 프레임워크를 통해 부팅되지 않는 예외가 발생하면 오류로 보고됩니다.예를 들어 Null Pointer 또는 Class Not Found 예외는 다음과 같은 오류를 보고합니다.
String s = null;
s.trim();
또는,
try {
// your code
} catch(Exception e) {
// log the exception
throw new MyException(e);
}
이렇게 하면 다음에서 장애가 보고됩니다.
Assert.fail("Failure here");
또는,
Assert.assertEquals(1, 2);
또는 다음과 같은 경우도 있습니다.
throw new AssertionException(e);
사용하는 Junit 버전에 따라 다릅니다.Junit 4는 장애와 오류를 구분하지만 Junit 4에서는 장애로만 단순화합니다.
다음 링크는 더 흥미로운 입력을 제공합니다.
http://www.devx.com/Java/Article/31983/1763/page/2
"JUnit을 사용한 Java 8에서의 Pragmatic Unit Testing"에서:
JUnit에서의 아사션(또는 아사트)은 테스트에 드롭하는 스태틱 메서드콜입니다각각의 주장은 어떤 조건이 참임을 확인할 수 있는 기회입니다.단언된 조건이 true로 유지되지 않으면 테스트는 바로 중지되고 JUnit은 테스트 실패를 보고합니다.
(또한 JUnit이 테스트를 실행할 때 예외가 발생해도 검출되지 않을 수 있습니다.이 경우 JUnit은 테스트에러를 보고합니다).
아래 테스트에서는 테스트 오류와 테스트 실패의 차이를 설명합니다.
테스트 에러와 테스트 에러가 발생하는 라인을 코멘트했습니다.
@Test
public void testErrorVsTestFailure() {
final String sampleString = null;
assertEquals('j', sampleString.charAt(0) );
//above line throws test error as you are trying to access charAt() method on null reference
assertEquals(sampleString, "jacob");
//above line throws Test failure as the actual value-a null , is not equal to expected value-string "jacob"
}
따라서 Junit은 예외가 발생할 때마다 테스트 오류를 표시하고 예상 결과 값이 실제 값과 일치하지 않을 경우 테스트 오류를 표시합니다.
소스 클래스: JUnitReportReporter.java
public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String defaultOutputDirectory) {
//......
for (ITestResult tr : (Set) entry.getValue()) {
TestTag testTag = new TestTag();
boolean isSuccess = tr.getStatus() == 1;
if (!(isSuccess)) {
if (tr.getThrowable() instanceof AssertionError)
++errors;
else {
++failures;
}
}
}
위의 방법에서 아래 줄을 볼 수 있듯이
tr.getThrowable() AssertionError 인스턴스
AssertionError 인스턴스일 경우 오류 수가 증가합니다.그렇지 않으면(임의의 Throwable) 장애로 카운트됩니다.
메서드에 JUnit에서 를 발생시킴으로써 하는 것은 .@Test주석 및 오류는 예기치 않은 다른 예외에서 발생합니다. 이 두 한 차이가 있습니다.
실패는 테스트가 올바르게 실행되어 코드의 결함을 식별했음을 의미합니다.
에러는 코드의 버그를 의미할 수 있지만 테스트도 하지 않은 버그를 의미합니다.또, 테스트 자체에 버그가 포함되어 있는 것을 의미할 수도 있습니다.
즉, 장애는 테스트 대상 코드를 다시 작성해야 함을 의미합니다.에러는 유닛테스트를 다시 작성해야 한다는 것을 의미합니다.은, 코드에 에서도, 예를 들면 「에러」라고 하는 이 있습니다.NullPointerException테스트도 하지 않은 결함을 발견했으므로 테스트하는 것이 현명할 수 있습니다.
| 테스트 방식 슬로우 | 테스트 결과 |
|---|---|
| java.displaces를 클릭합니다.Assertion Error(어설션 오류) | 실패. |
| org.junit.전제 위반예외. | 건너뛰었다 |
| 예상되는 예외 | 네 알겠습니다 |
| 다른 예외 | 에러 |
| 예외는 없다 | 네 알겠습니다 |
| 테스트 방법 이외의 예외 | 에러 |
- Assert 메서드는 Assertion만 던집니다.예외입니다.
- @Test 주석에서 예외가 예상된 것으로 선언되었습니다.
- 테스트 메서드 이외의 코드는 @Before, @BeforeClass 등으로 주석을 달 수 있습니다.
- IDE 보고서 내의 카운트는 첫 번째 실패한 어설션이 테스트를 종료하기 때문에 어설션이 아닌 테스트(테스트 방식)를 카운트합니다.
- 경험적으로 테스트 방식이 비정상적으로 종료된 경우(return 스테이트먼트가 아닌 경우), 실패하거나 그 반대의 경우도 마찬가지입니다.
아이러니하게도 junit 및 기타 테스트 관련 프레임워크(testng, hamcrest)는 상태를 검증하는 아사트 조작을 제공하고 실패 시 java.lang을 "언더 더 후드"합니다.AssertionError가 느려지고 있습니다.btw는 java.lang을 확장합니다.에러
그러나 그것은 물론 충분히 유효한 위의 답변과 모순되지 않는다.따라서 특정 테스트 플로우를 장애로 마크하기 위해서는 AssertionError를 던질 수 있지만 전용 fail() API를 사용하는 것이 더 적절하기 때문에 해당 매뉴얼에 실제로 문서화되어 있는지 모르겠습니다.다른 종류의 슬로우 가능은 실패가 아닌 오류로 간주됩니다.
기본적으로 오류는 비정상적인 테스트 실행으로 인해 발생하는 반면 실패는 채워지지 않은 어설션을 의미합니다.그리고 IDE마다 합격, 불합격, 오류 테스트의 색상이 다른 심볼 아이콘이 있는 것 같습니다.
상세한 것에 대하여는, 여기를 참조해 주세요.
언급URL : https://stackoverflow.com/questions/3425995/whats-the-difference-between-failure-and-error-in-junit
'programing' 카테고리의 다른 글
| 파일의 첫 줄만 읽으시겠습니까? (0) | 2022.09.21 |
|---|---|
| 전치/해동 기능(zip 반대) (0) | 2022.09.21 |
| json과 simplejson Python 모듈의 차이점은 무엇입니까? (0) | 2022.09.21 |
| PHP에서 후행 0을 제거하는 방법 (0) | 2022.09.21 |
| 유형을 지정하지 않고 Java Enum을 참조하려면 어떻게 해야 합니까? (0) | 2022.09.21 |