2013-02-08 27 views
5

Tôi có một Grizzly HttpServer mà tôi muốn chạy trong toàn bộ thời gian thực hiện nhóm thử nghiệm. Ngoài ra, tôi muốn tương tác với cá thể HttpServer toàn cục từ số @Rule bên trong các bài kiểm tra.Chạy mã trước và sau tất cả các thử nghiệm trong thực thi chắc chắn

Vì tôi đang sử dụng Maven Surefire thay vì sử dụng các bộ thử nghiệm JUnit, tôi không thể sử dụng @BeforeClass/@AfterClass trên bộ thử nghiệm.

Ngay bây giờ, tất cả những gì tôi có thể nghĩ là lười biếng khởi tạo trường tĩnh và dừng máy chủ từ Runtime.addShutdownHook() - không đẹp!

+0

cái nào bạn đang sử dụng nếu không JUnit? – TheWhiteRabbit

+0

nếu bạn đang sử dụng thử nghiệm POJO hoặc TestNG, bạn có thể sử dụng câu hỏi được cập nhật @BeforeClass – TheWhiteRabbit

+0

@TechExchange để làm rõ rằng tôi đang sử dụng maven surefire – hertzsprung

Trả lời

7

Có hai tùy chọn, giải pháp maven và giải pháp chắc chắn. Giải pháp ít nhất là để thực hiện một plugin trong giai đoạn pre-integration-testpost-integration-test. Xem Introduction to the Build Lifecycle - Lifecycle Reference. Tôi không quen thuộc với hoa râm, nhưng đây là một ví dụ sử dụng cầu cảng:

<build> 
    <plugins> 
    <plugin> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>maven-jetty-plugin</artifactId> 
    <configuration> 
    <contextPath>/xxx</contextPath> 
    </configuration> 
    <executions> 
    <execution> 
     <id>start-jetty</id> 
     <phase>pre-integration-test</phase> 
     <goals> 
     <goal>run</goal> 
     </goals> 
     <configuration> 
     </configuration> 
    </execution> 
    <execution> 
     <id>stop-jetty</id> 
     <phase>post-integration-test</phase> 
     <goals> 
     <goal>stop</goal> 
     </goals> 
    </execution> 
    </executions> 
    </plugin> 

Lưu ý rằng giai đoạn cho startpre-integration-teststoppost-integration-test. Tôi không chắc chắn nếu có một plugin marsh grizzly, nhưng bạn có thể sử dụng maven-antrun-plugin thay thế.

Tùy chọn thứ hai là sử dụng JUnit RunListener. RunListener lắng nghe để kiểm tra các sự kiện, chẳng hạn như bắt đầu kiểm tra, kết thúc kiểm tra, thử nghiệm thất bại, thành công thử nghiệm, vv

public class RunListener { 
    public void testRunStarted(Description description) throws Exception {} 
    public void testRunFinished(Result result) throws Exception {} 
    public void testStarted(Description description) throws Exception {} 
    public void testFinished(Description description) throws Exception {} 
    public void testFailure(Failure failure) throws Exception {} 
    public void testAssumptionFailure(Failure failure) {} 
    public void testIgnored(Description description) throws Exception {} 
} 

Vì vậy, bạn có thể lắng nghe RunStarted và RunFinished. Chúng sẽ bắt đầu/dừng các dịch vụ mà bạn muốn. Sau đó, trong chắc chắn hơn, bạn có thể chỉ định một người biết lắng nghe tùy chỉnh, sử dụng:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.10</version> 
    <configuration> 
    <properties> 
     <property> 
     <name>listener</name> 
     <value>com.mycompany.MyResultListener,com.mycompany.MyResultListener2</value> 
     </property> 
    </properties> 
    </configuration> 
</plugin> 

Đây là từ Maven Surefire Plugin, Using JUnit, Using custom listeners and reporters

+0

Tôi không nghĩ tùy chọn đầu tiên sẽ hoạt động vì tôi cần truy cập vào cá thể 'HttpServer' từ 'TestRule', nhưng âm thanh' RunListener' hứa hẹn, cảm ơn! – hertzsprung

+0

đối với tôi, là một phần của giai đoạn tiền tích hợp, máy chủ jetty bắt đầu. Dòng đăng nhập cuối cùng là: [INFO] Đã bắt đầu Máy chủ Jetty. Sau đó, không có gì xảy ra. Nó bị kẹt. Trình cắm không an toàn của maven chắc chắn không thực thi các kiểm tra cũng như các máy chủ dừng. Bất kỳ ý tưởng gì là sai? Tôi đang sử dụng cùng cấu hình như bạn đã chỉ định. –

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