2013-05-22 14 views
7

Jaka jest różnica między następującymi dwoma blokami kodu?Jaka jest różnica między obiektem assert! = Null i Assert.assertNotNull (object)?

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

I

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

rozumiem, że Assert.AssertNotNull jest wywołanie funkcji z TestNG i assert jest kluczowym słowem Java (wprowadzone w wersji 1.4). Czy są jakieś inne różnice w tych dwóch? na przykład działa, wydajność itp.

Odpowiedz

7

Cóż, pierwszy przypadek korzysta z klasy Assert z ramy testowania i jest właściwą drogą, ponieważ TestNG zgłosi błąd w inteligentny sposób.

Można także dodać własną wiadomość do testu:

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

Drugi przypadek używa słowa kluczowego assert - to daje awarię ale ślad stosu mogą lub nie mogą być zrozumiałe na pierwszy rzut oka. Musisz również pamiętać, że asercje NIE mogą być włączone.

3

Tak, tam jest: Hasło assert musi być włączony z flagą -EA, jak

java -ea MyClass 

assert nich może być włączany i wyłączany bez jakichkolwiek zmian w kodzie.

Klasa Assert zawsze będzie działać. Tak więc, jeśli testujesz, użyj klasy Assert, a nie słowa kluczowego assert. To może dać ci pojęcie, że wszystkie twoje testy mijają i chociaż w rzeczywistości niczego nie potwierdzają. W ciągu ponad 10 lat kodowania, nigdy nie widziałem nikogo, kto umożliwiłby asercje z wyjątkiem Jetbrains, więc zamiast tego użyj Assert. Lub lepiej, użyj Hamcrest.

+0

Jest to uruchamiane na platformie TestNG. TestNG włącza stwierdzenia twierdzące. Nie jestem pewien, skąd bierzesz swoje informacje. –

+0

Masz rację, zaktualizowałem swoją odpowiedź, aby to poprawić. Dzięki! –

0

Różnica polega zasadniczo na braku słowa kluczowego assert. Jest to źródło, z TestNG:

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

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

Należy pamiętać, że PO używany tag TestNG!

To nie jest JUnit's Assert!

Kilka informacji o Java assert słów kluczowych: assert

2

Mówiąc o wydajności:

assert object!=null; jest pojedynczy rachunek java ale Assert.assertNotNull(object) spowoduje wywołanie z wieloma funkcjami TestNG, więc w.r.t. wydajność assert object!=null; będzie nieznacznie lepsza.

+0

Co masz na myśli mówiąc nieco lepiej? Czy możesz podać kilka liczb? – Senstive

+0

Mówiąc nieco, mam na myśli "assert object! = Null;" będzie miał mniejszy czas, ale różnica będzie w milisekundach – Raheel