2016-03-17 19 views
7

ile nasıl çalışırım? JUnit ve Selenium Webdriver kullanıyorum. Ben aşağıda, benim kodunda bunları yazmak nasıl olarak sırayla benim test yöntemleri çalıştırmak istiyorum:Test yöntemleri Junit

welcomeNewUserTest() 
registerUserTest() 
questionaireNewUserTest() 
:

@Test 
public void registerUserTest(){ 
    // code 
} 

@Test 
public void welcomeNewUserTest(){ 
    // code 
} 

@Test 
public void questionaireNewUserTest(){ 
    // code 
} 

Ama çalışmıyor, her zaman bu sırada benim test yöntemleri yürütür

Yöntemimi son eki Test ile adlandırırsam bir yerle ilgili bir cevap okurum, daha sonra JUnit bunları kod içinde nasıl sipariş ettiğim gibi yürütür. Görünüşe göre, bu işe yaramıyor.

Herhangi bir yardım? Teşekkürler

+3

'u okuyun. Eğer senaryonuzu doğru anladıysam, bu test için kötü bir yaklaşım - testlerin birbirinden bağımsız olması gerekir. –

+0

@DmitryZaitsev: Evet, biliyorum. Çünkü kabul testi yazdım ve gerçekten büyük, ben sadece küçük test yöntemlerine ayırmaya çalışıyorum. Junit'in – Ragnarsson

+1

sırasıyla onları çalıştırabildiğini görmeye çalışın [JUnit4'te belirli bir sırayla test yöntemleri nasıl çalıştırılır?] (Http://stackoverflow.com/questions/3693626/how-to-run-test-methods- in-specific-order-in-junit4) –

cevap

6

Bunlar gibi testler için - adımların birbirine bağımlı olduğu yerlerde - bunları gerçekten tek bir birim olarak çalıştırmalısınız. Gerçekten böyle bir şey yaptığını edilmelidir:

@Jeremiah aşağıda bahseder gibi, testler beklenmedik yürütebileceği ayrı benzersiz şekillerde bir avuç vardır
@Test 
public void registerWelcomeAndQuestionnaireUserTest(){ 
    // code 
    // Register 
    // Welcome 
    // Questionnaire 
} 

.

Şimdi söyledim, işte çözümün.

Ayrı testler isterseniz, @FixMethodOrder ve daha sonra NAME_ASCENDING ile yapabilirsiniz. Bu bildiğim tek yol.

@FixMethodOrder(MethodSorters.NAME_ASCENDING) 
public class TestMethodOrder { 

    @Test 
    public void testA() { 
     System.out.println("first"); 
    } 
    @Test 
    public void testC() { 
     System.out.println("third"); 
    } 
    @Test 
    public void testB() { 
     System.out.println("second"); 
    } 
} 

çalıştırır:

testA(), testB(), testC()

Senin durumunda:

@FixMethodOrder(MethodSorters.NAME_ASCENDING) 
public class ThisTestsEverything{ 

    @Test 
    public void T1_registerUser(){ 
     // code 
    } 

    @Test 
    public void T2_welcomeNewUser(){ 
     // code 
    } 

    @Test 
    public void T3_questionaireNewUser(){ 
     // code 
    } 

} 
+1

Teşekkürler. Dediğin gibi yaptım, onları tek bir birim olarak çalıştırdım. Sadece bunu yapmak için bir fırsat olup olmadığını bilmek istedim. Ve @ FixMethodOrder çalışır. Aradığım şey gibi. Teşekkürler. Bunu bilmiyordum – Ragnarsson

+0

@LouisT Haha iyi hem sizin yaklaşımınızı değiştirdiniz hem de ihtiyacınız olduğunda çözümünüz var. –

+1

Sipariş notlarını kullanırken hatırlanması gereken tek şey, testlerin nasıl yürütüldüğüne bağlı olarak hala yanlış davranabilmesidir. Örneğin, eğer SureFire kullanıyorsanız, bu konfigürasyonda RunOrder tanımlamanız gerekir: http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#runOrder Ayrıca, eğer Testlerinize (Maven gibi) çok iş parçacığı uygulayabilen yürütme aracı, testlerinizi tekrardan yürütür.Bu noktadan emin değilim, ama beklenmedik sonuçlar görmeye başlarsanız akılda kalmaya değer. – Jeremiah

3

Sen nasıl yazılacağı olarak sırayla test yöntemleri çalıştıramaz. Nokta, testin birbirinden bağımsız olması gerektiğidir. JUnit bağımlı testleri teşvik etmez. Eğer çok istiyorsan eğer

Ama ...

@FixMethodOrder açıklama yoktur. Lütfen, aşağıdaki Annotation Type FixMethodOrder