2011-10-21 11 views
7

Tôi đã cố gắng để tạo ra một bộ thử nghiệm cá nhân bằng cách tạo ra một suiterunner mở rộng runner. Trong bộ thử nghiệm được chú thích với @RunWith(suiterunner.class) tôi đang đề cập đến các lớp thử nghiệm cần được thực thi.thực hiện junit của nhiều vận động viên

Trong lớp thử nghiệm tôi cần lặp lại một thử nghiệm cụ thể, để làm như vậy tôi đang sử dụng giải pháp như đã đề cập ở đây: http://codehowtos.blogspot.com/2011/04/run-junit-test-repeatedly.html. nhưng kể từ khi tôi đã tạo ra một suiterunner mà gây ra các lớp học thử nghiệm và trong đó lớp thử nghiệm tôi đang thực hiện @RunWith(ExtendedRunner.class), một lỗi khởi tạo được ném.

Tôi cần trợ giúp để quản lý 2 người chạy này và cũng có cách nào để kết hợp 2 người chạy cho một thử nghiệm cụ thể không? Có cách nào khác để giải quyết vấn đề này hay bất kỳ cách nào dễ dàng hơn để tiếp tục không?

+0

Bạn có thể cung cấp lỗi đầy đủ và ngăn xếp không? Nó sẽ hoạt động theo cách bạn mô tả nó. –

Trả lời

2

Trong trường hợp bạn đang sử dụng JUnit mới nhất, bạn có thể @Rules trở thành giải pháp sạch hơn rất nhiều cho vấn đề của mình. Đây là một mẫu;

Hãy tưởng tượng đây là ứng dụng của bạn;

package org.zero.samples.junit; 

/** 
* Hello world! 
* 
*/ 
public class App { 
    public static void main(String[] args) { 
    System.out.println(new App().getMessage()); 
    } 

    String getMessage() { 
    return "Hello, world!"; 
    } 
} 

Đây là lớp thử nghiệm của bạn;

package org.zero.samples.junit; 

import static org.junit.Assert.*; 

import org.junit.Rule; 
import org.junit.Test; 

/** 
* Unit test for simple App. 
*/ 
public class AppTest { 

    @Rule 
    public RepeatRule repeatRule = new RepeatRule(3); // Note Rule 

    @Test 
    public void testMessage() { 
    assertEquals("Hello, world!", new App().getMessage()); 
    } 
} 

Tạo lớp quy tắc như;

package org.zero.samples.junit; 

import org.junit.rules.TestRule; 
import org.junit.runner.Description; 
import org.junit.runners.model.Statement; 

public class RepeatRule implements TestRule { 

    private int repeatFor; 

    public RepeatRule(int repeatFor) { 
    this.repeatFor = repeatFor; 
    } 

    public Statement apply(final Statement base, Description description) { 
    return new Statement() { 

     @Override 
     public void evaluate() throws Throwable { 
     for (int i = 0; i < repeatFor; i++) { 
      base.evaluate(); 
     } 
     } 
    }; 
    } 

} 

Thực hiện trường hợp thử nghiệm như bình thường, chỉ trong trường hợp này, trường hợp thử nghiệm của bạn sẽ được lặp lại trong một số lần nhất định. Bạn có thể tìm thấy các trường hợp sử dụng thú vị trong đó @Rule thực sự có thể chứng minh là tiện dụng. Hãy thử tạo quy tắc tổng hợp, chơi xung quanh bạn chắc chắn sẽ được dán ..

Hy vọng điều đó sẽ hữu ích.