답변:
유용하다고 생각되는 몇 가지 경우 :
try{ // do stuff... fail("Exception not thrown"); }catch(Exception e){ assertTrue(e.hasSomeFlag()); }
노트 :
JUnit4부터 예외가 발생하는지 테스트하는 더 우아한 방법이 있습니다. 주석 사용 @Test(expected=IndexOutOfBoundsException.class)
그러나 예외를 검사하려는 경우에도 작동하지 않으므로 여전히 fail()
.
일반적인 사용 사례는 부정적인 테스트에서 예외가 발생하지 않았을 때 호출하는 것입니다.
다음 의사 코드와 같은 것 :
test_addNilThrowsNullPointerException()
{
try {
foo.add(NIL); // we expect a NullPointerException here
fail("No NullPointerException"); // cause the test to fail if we reach this
} catch (NullNullPointerException e) {
// OK got the expected exception
}
}
@Before 메서드에서 무언가 잘못되었을 수있는 경우에 사용했습니다.
public Object obj;
@Before
public void setUp() {
// Do some set up
obj = new Object();
}
@Test
public void testObjectManipulation() {
if(obj == null) {
fail("obj should not be null");
}
// Do some other valuable testing
}
@Before
메서드가 성공 했는지 확인하려면 해당 메서드에서 직접 확인하는 것이 좋습니다. 보너스로 적어도 JUnit과 TestNG는 @Before
/ @After
메소드의 오류에 대해 다른 실패를보고 하므로 문제가 테스트 자체에 없었 음을 알 수 있습니다.
이것이 Fail 메서드를 사용하는 방법입니다.
테스트 케이스가 끝날 수있는 세 가지 상태가 있습니다.
(예외가 발생할 것으로 예상되는 부정적인 테스트 케이스와는 달리).
eclipse를 사용하는 경우 세 가지 상태가 각각 녹색, 파란색 및 빨간색 마커로 표시됩니다.
세 번째 시나리오에서는 실패 작업을 사용합니다.
예 : public Integer add (integer a, Integer b) {return new Integer (a.intValue () + b.intValue ())}
fail()
.
동시 및 / 또는 비동기 설정에서 특정 메서드 (예 : 델리게이트, 이벤트 리스너, 응답 핸들러, 이름 지정)가 호출 되지 않았는지 확인할 수 있습니다. 모의 프레임 워크는 제쳐두고fail()
이러한 메서드를 하여 테스트에 실패 . 만료 된 시간 초과는 이러한 시나리오에서 또 다른 자연적인 실패 조건입니다.
예를 들면 :
final CountDownLatch latch = new CountDownLatch(1);
service.asyncCall(someParameter, new ResponseHandler<SomeType>() {
@Override
public void onSuccess(SomeType result) {
assertNotNull(result);
// Further test assertions on the result
latch.countDown();
}
@Override
public void onError(Exception e) {
fail(exception.getMessage());
latch.countDown();
}
});
if ( !latch.await(5, TimeUnit.SECONDS) ) {
fail("No response after 5s");
}
가장 중요한 사용 사례는 아마도 예외 검사입니다.
junit4에는 예외 발생 여부를 확인하기위한 예상 요소가 포함되어 있지만 새로운 junit5의 일부가 아닌 것 같습니다. 를 사용 fail()
하는 또 다른 장점은 테스트 케이스 정리 expected
를 finally
허용 하는 것과 결합 할 수 있다는 것 입니다.
dao.insert(obj);
try {
dao.insert(obj);
fail("No DuplicateKeyException thrown.");
} catch (DuplicateKeyException e) {
assertEquals("Error code doesn't match", 123, e.getErrorCode());
} finally {
//cleanup
dao.delete(obj);
}
다른 의견에서 언급했듯이. 구현이 끝날 때까지 테스트가 실패하는 것도 합리적으로 들립니다.