2013-04-10 21 views
25

sonuçları:iddia ve böyle bazı testler

testler Stdout'a her assert mesajı yazdırmak ve daha sonra assert sonuçlanması ise ben gerekenler
@Test 
public void test01() 
{ 
    Position p = getPositionAt('a', 1); 
    assertNotNull("a1 exists", p); 
    assertNotNull("figure exists a1", p.getFigure()); 

    p = getPositionAt('a', 2); 
    assertNotNull("exists a2", p); 
    assertNull("figure exists a2", p.getFigure()); 

    p = getPositionAt('b', 1); 
    assertNotNull("exists b1", p); 
    assertNull("figure exists b1", p.getFigure()); 
} 

.

a1 exists -success 
figure exists a1 -success 
exists a2 -success 
figure exists a2 -succcess 
exists b1 -succcess 
figure exists b1 -failed 

Ama bu nasıl yapmalı:

Bu test sınıfından biçimi gereklidir mı? JUnit ile çalışıyorum ve hiç bir fikrim yok. runners ve suites'u kullanma yolu var mı? Veya herhangi bir assertSuccess(), assertFailed() yöntemleri var mı? Herhangi bir ipucu için teşekkürler.

+0

,' message' parametre geçerlidir "a1 yok "vs ... – Jonathan

+5

herhangi özel bir nedeni neden bunu istesin? –

+1

Hem ihtiyaçlarınız birim test dünyada bir anti-desen düşünülebilir. Kişisel Testler tek bir şey iddia gerekir, bu yüzden olmayan bir başarısız iddiasını isteyen için bir sebep olmamalıdır.Testleriniz, tüm kontroller tarafından yapıldığından otomatikleştirilmelidir, bu nedenle manuel inceleme için çıktı almak istememeniz gerekir. Pratikte, masa başı testlerin çalıştırılması ve bir mantıksal gerçeği kontrol etmek için çoklu iddia çağrılarına ihtiyaç duyulması gibi, ilkini yapmak için iyi sebepler vardır. Yine de, ikinci dikkatli olun. Otomatikleştirme, birim ve regresyon testinde ileriye giden tek yoldur. – user7610

cevap

18

İlk edin

try{ 
    someCall(); 
catch(Exception e){ 
    fail(): // exception shouldn't happen, use assertTrue(true) if it should 
} 

Yine, bir mesaj eklemek için bu yöntemlerin sürümleri vardır, sen iki tane bir değil sorunları. Bir onaylama işlemi başarısız olduğunda, AssertionError istisnası atılır. Bu, bu noktadan geçmiş herhangi bir iddianın kontrol edilmesini engeller. Bunu ele almak için bir ErrorCollector kullanmanız gerekir.

İkincisi, ben bunu yapmak JUnit yerleşik herhangi bir yolu var olduğuna inanmıyorum. Ancak, iddialarını sarın o kendi yöntemlerini uygulamak olabilir: onaylama işlemi böylece `assertNotNull` mesajı aslında olmalı, başarısız olduğunda arada

public static void assertNotNull(String description, Object object){ 
    try{ 
      assertNotNull(description, object); 
      System.out.println(description + " - passed"); 
    }catch(AssertionError e){ 
      System.out.println(description + " - failed"); 

     throw e; 
    } 
} 
+2

, işlev içinde assertNotNull olmamalıdır TestCase.assertNotNull? – IHeartAndroid

2

Son bir çare seçenek besbelli pek de güvenilir olsa her biri bir karşılık gelen System.out.println ile iddia eşleştirmek etmektir. Yine de, eğer tüm diğerleri başarısız olursa sorunu çözecektir.

assertNotNull("exists a2", p); // prints "exists a2" if p is null

başarısı üzerinde mesaj baskı içinde özel bir değer yoktur:

10

Tüm assertXXX yöntemleri hata bir dize görüntülemek için izin veren bir form var.

DÜZENLEME

JUnit tipik olarak bir assert 2 formları sağlar. Yukarıdaki örneği takip etmek için 1 2 yollarla bir null değeri test edebilirsiniz:

assertNotNull(p)

veya

assertNotNull("my message on failure", p)

çerçeve gerektirmeyen diğer çabayla hata iletileri yazdırır Sizin tarafınızdan (çerçeve tarafından sağlanmıştır).

aşağıdaki modeli kullanmak istiyorsunuz istisnalar için test etmek için:

API

+0

Tamam, bu yüzden iletiyi savcının önüne taşıyabilirim, ancak iletilen sonuç iletisini ilettiyse veya başarısız olursa nasıl yakalanır? –

+1

cevabımda gösterildiği gibi istisnayı yakalayın, ancak bunu yaparsanız, istisnayı yeniden düzenlediğinizden emin olun (ya da bir hata toplayıcısında yakalayın) aksi halde yanlış pozitifler alırsınız –

+0

Ben assertTrue ("bazı mesajlar", onaylama); ve mesaj hala yazdırmıyor. –

İlgili konular