2013-08-05 21 views
5

JUnit kullanarak, Eclipse (Neon) içinde çalışan ünite testinde kullandığım bir Java kodum var. Test edilen bazı kodların içinde bir hata vardır ve bu da sonsuz bir döngüye girmesine neden olur. JUnit koşusu, elbette, bitmez. Test çalışmasını nasıl öldürebilirim?Bir sonsuzluk döngüsüne girmiş Eclipse'de bir JUnit test çalıştırması nasıl öldürülür

Test çalıştırmayı durdurma düğmesi ("JUnit Test Çalışmasını Durdur") iyi çalışmıyor: GUI, test çalışmasını durdurduğunu düşünüyor, ancak CPU etkinliğine bir göz atıyor (örneğin, top kullanarak)), bir Java iş parçacığının hala çalıştığını gösterir. İş parçacığını öldürme sinyali göndererek kendim öldürebilirim. Ama bu bir klud görünüyor ve rahatsız edici. Eclipse'in içinde daha iyi bir yol var mı?

cevap

6

Kırmızı düğmeyi kullanarak konsol görünümünden kesin. Bu işlemi durdurur. junit görünümünden Durdurma

enter image description here

sadece durdurmak için sorar.

0

İlk olarak Matthew Farwell'in cevabını deneyin. Eğer bu işe yaramazsa o zaman işlemlere devam etmeli (Windows'da ctrl + shift + esc, sonra sekmeler) ve java.exe görevini seçmeli, sonra işlemi bitirmelisiniz. Hiç tutulmayı öldürmek için gereken halinde, bu javaw.exe

3

Sen @Test açıklama içinden bir zaman aşımı belirterek JUnit ile böyle şeyler işleyebilir var. Örneğin: test yöntemi zamanında bitirmek etmezse

// Simple test-case which will always fail with time-out 
@Test(timeout = 1000 * 60) throws Exception // 60 seconds 
public void testSomething() { 
    for (int i = 0; i < 100; i++) { // 100 seconds 
     Thread.sleep(1000); 
    } 
} 

, sonra JUnit onu kesmek ve bir test hatayı bildirecektir. Belirli bir deney * kudretiyle bir hata tahmin eğer

java.lang.Exception: test timed out after 60000 milliseconds 
    at java.lang.Thread.sleep(Native Method) 
    at my.package.Test1.testSomething(Test1.java:12) 
+0

Faydalı * sonsuz bir döngüye neden: öyle olacak Yukarıdaki Örneğin . Bundan şüphe etmek için iyi bir nedeniniz yoksa ya da bir sonraki girişimde yeniden faktörleme sonsuz bir döngü yaratıyorsa çok yararlı olmaz. – Raedwald

+0

@Raedwald Peki, ben her ne kadar ben * sonsuza kadar beklemek için herhangi bir nedene sahip olmama rağmen * her * test yöntemini * @ Test (timeout = 60000) '(veya başka bir keyfi yüksek zaman aşımı) ile mantıksallaştırmanız ve açıklama ekleyeceğim. döngü. –

+0

Bunu ekleyerek * her * sınama bir kod kokusu olduğunu düşünüyorum. – Raedwald

İlgili konular