2016-03-17 20 views
7

Tôi đang sử dụng JUnit và Selenium Webdriver. Tôi muốn chạy các phương pháp thử nghiệm của tôi theo thứ tự như thế nào tôi viết chúng trong mã của tôi, như sau:Làm thế nào để chạy các phương pháp thử nghiệm với Junit

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

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

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

Nhưng nó không hoạt động, nó luôn luôn thực hiện phương pháp thử nghiệm của tôi theo thứ tự này:

welcomeNewUserTest() 
registerUserTest() 
questionaireNewUserTest() 

Tôi đọc câu trả lời ở đâu đó nếu tôi đặt tên phương thức của mình bằng hậu tố Kiểm tra, sau đó JUnit sẽ thực hiện chúng theo thứ tự như cách tôi đặt hàng chúng trong mã. Rõ ràng, điều này không hoạt động.

Bất kỳ trợ giúp nào? Cảm ơn

+3

Nếu tôi hiểu kịch bản của bạn chính xác, đó là một cách tiếp cận kém để thử nghiệm - các thử nghiệm của bạn phải độc lập với nhau. –

+0

@DmitryZaitsev: vâng, tôi biết. Bởi vì tôi viết bài kiểm tra chấp nhận, và nó thực sự lớn, tôi chỉ cố gắng chia nhỏ nó thành các phương pháp thử nghiệm nhỏ. Hãy thử để xem nếu Junit có thể chạy chúng theo thứ tự – Ragnarsson

+1

Có thể trùng lặp của [Làm thế nào để chạy các phương pháp thử nghiệm theo thứ tự cụ thể trong JUnit4?] (Http://stackoverflow.com/questions/3693626/how-to-run-test-methods- in-specific-in-junit4) –

Trả lời

6

Vì vậy, đối với các thử nghiệm như thế này - nơi các bước phụ thuộc vào nhau - bạn thực sự nên thực thi chúng dưới dạng một đơn vị. Bạn thực sự nên làm điều gì đó như:

@Test 
public void registerWelcomeAndQuestionnaireUserTest(){ 
    // code 
    // Register 
    // Welcome 
    // Questionnaire 
} 

Như @Jeremiah đề cập dưới đây, có một số cách độc đáo để kiểm tra riêng biệt có thể thực thi không thể đoán trước.

Bây giờ tôi đã nói rằng, đây là giải pháp của bạn.

Nếu muốn thử nghiệm riêng biệt, bạn có thể sử dụng @FixMethodOrder và sau đó thực hiện theo NAME_ASCENDING. Đây là cách duy nhất tôi biết.

@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"); 
    } 
} 

sẽ thực hiện:

testA(), testB(), testC()

Trong trường hợp của bạn:

@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

Cảm ơn. Tôi thực sự đã làm như bạn nói, thực hiện chúng như một đơn vị. Tôi chỉ muốn biết nếu có cơ hội để làm điều này. Và @FixMethodOrder hoạt động. Nó giống như những gì tôi tìm kiếm. Cảm ơn. Tôi không biết về nó – Ragnarsson

+0

@LouisT Haha cũng thật tuyệt khi cả hai đã thay đổi cách tiếp cận của bạn và bây giờ bạn có giải pháp của bạn nếu bạn cần nó. –

+1

Một điều cần nhớ khi sử dụng chú thích đặt hàng là nó có thể vẫn hoạt động không đúng tùy thuộc vào cách các thử nghiệm được thực thi. Ví dụ: nếu bạn sử dụng SureFire, bạn sẽ cần xác định RunOrder trong cấu hình đó: http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#runOrder Ngoài ra, nếu bạn sử dụng công cụ thực thi có thể đưa đa luồng vào các thử nghiệm của bạn (chẳng hạn như Maven) các bài kiểm tra của bạn có thể thực thi lại theo thứ tự.Tôi không chắc chắn về điểm này, nhưng bạn nên ghi nhớ nếu bạn bắt đầu thấy kết quả không mong muốn. – Jeremiah

3

Bạn không thể chạy các phương pháp thử nghiệm của bạn theo thứ tự như cách thức chúng được viết ra. Điểm là thử nghiệm phải độc lập với nhau. JUnit không khuyến khích kiểm tra phụ thuộc.

Nhưng nếu bạn rất muốn ...

Có chú thích @FixMethodOrder. Vui lòng đọc phần sau đây Annotation Type FixMethodOrder

Các vấn đề liên quan