2012-01-10 28 views
10

Không có kiểm tra nào được thực thi, cả hai lớp bê tông đều bị bỏ qua. Làm thế nào để làm cho nó hoạt động? (Tôi mong đợi test1() sẽ được thực hiện cho cả hai IntegerDouble).Thừa kế thử nghiệm JUnit không hoạt động

Tôi sử dụng JUnit 4.8.1.

Cập nhật: có vẻ như vấn đề có liên quan đến plugin maven-surefire chứ không phải JUnit. Xem câu trả lời của tôi dưới đây.

+0

Bạn có cần gia hạn TestCase không? –

+0

Có cần thiết ngay cả trong trường hợp tôi sử dụng chú thích không? – agibalov

+2

Junit4 không yêu cầu bạn mở rộng TestCase nhưng làm cách nào bạn chạy chúng? Từ dòng lệnh? Từ Eclipse? – jeff

Trả lời

12

Đã đổi tên tất cả các lớp học của tôi thành hậu tố "Kiểm tra" và giờ nó hoạt động (Concrete1Test, Concrete2Test).

Cập nhật:

Đó là liên quan với các thiết lập mặc định của maven-surefire-plugin.

http://maven.apache.org/plugins/maven-surefire-plugin/examples/inclusion-exclusion.html

Theo mặc định, chắc chắn Plugin sẽ tự động bao gồm tất cả các lớp học thử nghiệm với các mẫu ký tự đại diện sau:

**/Test*.java - bao gồm tất cả các thư mục con của nó và tất cả tên tập tin java bắt đầu bằng "Test" . **/*Test.java - bao gồm tất cả các thư mục con của nó và tất cả tên tệp java kết thúc bằng "Kiểm tra". **/*TestCase.java - bao gồm tất cả các thư mục con của nó và tất cả tên tệp java kết thúc bằng "TestCase".

+2

Điều này là do maven plugin chắc chắn sử dụng để chạy thử nghiệm "phát hiện ra" các bài kiểm tra dựa trên tên lớp. Họ phải phù hợp với một trong một vài mẫu được chấp nhận, BlahTest là một trong số họ. Dưới đây là thông tin thêm về cài đặt mặc định và cách bạn có thể tùy chỉnh chúng trong cấu hình của bạn ... http://maven.apache.org/plugins/maven-surefire-plugin/examples/inclusion-exclusion.html –

+1

Đúng, điều này làm cho giác quan.Tên tệp mặc định được plugin chắc chắn sử dụng (plugin maven thực thi khi bạn gọi 'kiểm tra mvn') là' **/Test * .java', '**/* Test.java' và' **/* TestCase .java'. Tham khảo: http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#includes – matsev

0

Tôi thử nghiệm này trong Eclipse, sử dụng mã bộ xương của bạn, và nó làm việc tốt:

Base Class:

package stkoverflow; 

import org.junit.Test; 

public abstract class GenericTests<T> { 
    protected abstract T getT(); 

    @Test 
    public void test1() { 
     getT(); 
    }  
} 

Subclass:

package stkoverflow; 

public class ConcreteTests1 extends GenericTests<Integer> { 

    @Override 
    protected Integer getT() { 
     return null; 
    }  
} 

Chạy ConcreteTests1 trong Junit Eclipse Runner làm việc tốt. Có lẽ vấn đề là với Maven?