2016-03-22 15 views
1

JUnit kullanarak test yapmaya çalışıyorum ve yanlış yaptığımı anlamak için uğraşıyorum. Oldukça basit bir şey yaptım:JUnit: test notu ve beklenen istisnalar

Bir şey yaratması gereken bir sınıf. Şimdiye kadar sadece aldığım nesnenin boş olup olmadığını test ediyorum.

public class TestedClass { 
    public void create(Object o) { 
     if (o == null) { 
      throw new IllegalArgumentException(); 
     } else { 
      System.out.println("Not null!"); 
     } 
    } 
} 

Test sınıfı, yeni bir TestedClass nesnesi oluşturur ve null ile bir şey oluşturmaya çalışır. Bir IllegalArgumentException bekliyor.

import org.junit.Test; 
public class Tester { 
    @Test(expected = IllegalArgumentException.class) 
    public void createWithNullShouldThrowException() { 
     TestedClass t = new TestedClass(); 
     t.create(null); 
    } 
} 

Sadece ana sınıf. Bütün test prosedürü sırasında atılan bir IllegalArgumentException varsa

public class Main { 
    public static void main(String[] args) { 
     Tester test = new Tester(); 
     test.createWithNullShouldThrowException(); 
     System.out.println("passed all tests!"); 
    } 
} 

Anladığım kadarıyla, düzgün sonlandırmak gerekir. Benim program olarak vaka ile hangi sonlandırma edilir: Bu createWithNullShouldThrowException Tester sınıfında() yöntemi ile yakalanmak gerekir yoksa bunu doğru anlamak değilim çünkü olmamalı

Exception in thread "main" java.lang.IllegalArgumentException 
    at TestedClass.create(TestedClass.java:4) 
    at Tester.createWithNullShouldThrowException(Tester.java:6) 
    at Main.main(Main.java:7) 

? Bunun yerine bunu bir deneyin yakalama bloğu ile yapabileceğimi biliyorum, ancak sadece bu durumda neyin yanlış olduğunu bilmek istiyorum. Herhangi bir yardım varsa, IntelliJ IDEA 16.1 kullanıyorum. Herhangi bir yardım takdir edilecektir.

+0

Ana yöntemde bir test örneği oluşturmanız gerekmez. Eclipse'de test sınıfını dosyaya sağ tıklayıp As-> JUnit Testini Çalıştır'ı çalıştırabilirsiniz. Eminim ki benzer bir şey var Intellij. –

+0

Yup. Ana() ile çalıştırmayın, jUnit ile çalıştırın. Doğru şekilde çalıştırıldığında mükemmel çalışır. –

+0

Bir kenara: '@Test (beklenen = IllegalArgumentException.class)' özelliğini kullanmayın. Bunun yerine 'ExpectedException' kullanın. Http://stackoverflow.com/questions/156503/how-do-you-assert-that-a-certain-exception-is-thrown-in-junit-4-tests?rq=1 adresine bakın, ancak kabul edilen cevabı göz ardı edin . Bu, istisnayı tespit etme konusunda daha iyi kontrol sağlar. –

cevap

4

Ana sınıfa/yönteme ihtiyacınız yoktur. Birim testleri birim test koşucusu üzerinden yapılmalıdır. Intellij Idea'de, @Test ek açıklamaları ile bir sınıfa sağ tıklayıp 'Çalıştır' menü maddesine tıklayabilir veya her testin küçük çalışma simgesini tıklayabilir veya testler klasörünün kökünü tıklayıp 'Tüm testleri çalıştır' butonuna tıklayabilirsiniz.

Bir maven projesinde, test doğru yerde ise, mvn test yazabilirsiniz. Diğer yapım araçları, test paketini çalıştırmanın bir yolunu içerecektir. Diğer IDE'ler gibi.

main yöntemine sahip olmak istiyorsanız, correct test runner numaralı telefonu arayarak junit sınama çerçevesini başlatmalısınız. Ancak bunu yapmak gerçekten çok muhtemel değildir.

+0

Teşekkürler, bu sabah beni deli ediyordu. – skulpt