2013-05-22 1 views
7

다음 두 코드 블록의 차이점은 무엇입니까?assert object! = null과 Assert.assertNotNull (object)의 차이점은 무엇입니까?

@Test 
public void getObjectTest() throws Exception { 
    Object object; 
    //Some code 
    Assert.assertNotNull(object); 
} 

@Test 
public void getObjectTest() throws Exception { 
    Object object; 
    //Some code 
    assert object!=null; 
} 

내가 Assert.AssertNotNull가 TestNG를하고 assert에서 함수 호출 것을 이해 할은 (자바 1.4에서 소개) 자바의 핵심 단어입니다. 이 둘에 다른 차이점이 있습니까? 예 : 성능, 기타 등

답변

7

첫 번째 사례는 테스트 프레임 워크에서 Assert 클래스를 사용하며 적절한 방법입니다. TestNG가 오류를 지능적인 방식으로보고하기 때문입니다.

또한 시험에 당신의 자신의 메시지를 추가 할 수 있습니다

Assert.assertNotNull(object, "This object should not be null"); 

두 번째 경우는 assert 키워드를 사용 - 그것은 당신에게 실패하지만 스택 추적 또는 한 눈에 이해할 수하지 않을 수도 있습니다를 제공 할 것입니다. 또한 어설 션을 사용할 수 없다는 점을 알아야합니다.

3

예, 있습니다 : 어설 키워드는 어설 코드를 변경하지 않고도 켜고 끌 수 그에

java -ea MyClass 

처럼 -ea 플래그를 사용 할 수 있습니다 활성화해야합니다.

Assert 클래스는 항상 대신 작동합니다. 따라서 테스트를 수행하는 경우 Assert 클래스를 사용하고 assert 키워드는 사용하지 마십시오. 이것은 모든 테스트가 통과한다는 아이디어를 줄 수 있지만 실제로는 아무 것도 주장하지 않습니다. 제 10 년 이상의 코딩 과정에서 Jetbrains를 제외한 어 써트를 활성화 한 사람은 본 적이 없으므로 대신 Assert를 사용하십시오. 또는 Hamcrest을 사용하십시오.

+0

이것은 TestNG 플랫폼에서 실행됩니다. TestNG는 단언 문을 가능하게합니다. 정보를 어디에서 얻고 있는지 확실하지 않습니다. –

+0

네 말이 맞아, 나는 이것을 해결하기 위해 내 대답을 업데이트했다. 감사! –

0

기본적으로 차이는 assert 키워드의 부족입니다. 이 TestNG의에서 원인 :

static public void assertNotNull(Object object) { 
    assertNotNull(object, null); 
} 

static public void assertNotNull(Object object, String message) { 
    assertTrue(object != null, message); 
} 

은 영업 이익이 TestNG의 태그를 사용주의하시기 바랍니다!

이것은 JUnit의 Assert이 아닙니다!

자바의 assert 키워드에 대한 일부 정보 : assert

2

성능에 대해 이야기 :

assert object!=null;은 하나의 자바 문하지만 Assert.assertNotNull(object)는 TestNG를 여러 기능의 호출 결과, 그래서 w.r.t.이됩니다 성능 assert object!=null;가 약간 더 좋을 것입니다.

+0

조금 더 나은 점은 무엇입니까? 몇 가지 번호를 제공해 주시겠습니까? – Senstive

+0

약간 '나는 assert object! = null;'을 의미합니다. 시간은 더 짧지 만 차이는 밀리 초입니다. – Raheel

관련 문제