2011-04-05 40 views
27

Tôi đã có những thử nghiệm sau đây:JUnit @Test mong đợi chú thích không làm việc

@Test(expected = IllegalStateException.class) 
public void testKey() { 
    int key = 1; 
    this.finder(key); 
} 

Nhưng JUnit báo cáo, rằng thử nghiệm thất bại, mặc dù nó ném - như mong đợi - một IllegalStateException.

Tôi có phải định cấu hình cái gì khác để thực hiện việc này không?


tôi chạy thử nghiệm bây giờ với

@RunWith(Suite.class) 
@SuiteClasses(Test.class) 
public class TestSuite { 

} 

như trong this question, nhưng tôi vẫn không nhận được kết quả mong muốn.

Và khi tôi xóa tiền tố test Tôi vẫn gặp lỗi.

Tôi phải nói rằng tôi chạy các thử nghiệm này với Eclipse, nhưng nó được cấu hình để sử dụng JUnit 4 Runner.

+5

Có thể bạn vô tình chạy thử nghiệm với JUnit 3. Lớp thử nghiệm có mở rộng TestCase không? Điều gì sẽ xảy ra khi bạn thay đổi tên của phương pháp thử nghiệm để nó không còn bắt đầu bằng 'test' nữa? –

+0

Khi tên của bài kiểm tra không bắt đầu bằng 'test', tôi nhận được thông báo 'junit.framework.AssertionFailedError: Không có bài kiểm tra nào được tìm thấy trong MyClass' –

+0

Và có, lớp mở rộng' TestCase'. –

Trả lời

45

Vấn đề là lớp học trong đó thử nghiệm được lồng nhau là phần mở rộng của TestCase. Vì đây là kiểu JUnit 3 nên chú thích không hoạt động.

Giờ đây lớp học của tôi là một lớp học.

2

Điều này có vẻ đúng với tôi.

Kiểm tra các giả định của bạn. Bạn có chắc chắn nó ném ngoại lệ? Nếu những gì bạn nói là đúng, việc loại bỏ mong đợi khỏi chú thích sẽ khiến nó không thành công.

Tôi sẽ bước qua mã bằng trình gỡ lỗi để xem điều gì đang diễn ra. Tôi sẽ giả sử bạn có một IDE sẽ làm như vậy, như IntelliJ.

3

Không, kiểm tra JUnit này sẽ hoạt động như hiện tại - không có gì cần thiết hơn ở bên này.

Điều gì khiến bạn chắc chắn rằng thử nghiệm sẽ ném một số IllegalStateException? Có thể nó được đưa vào một ngoại lệ khác loại?

Vui lòng gửi thông báo lỗi chính xác từ JUnit.

Như @duffymo đã đề xuất, thật dễ dàng để xác minh những gì (nếu có) ngoại trừ kiểm tra thực sự ném.

+0

Thông điệp của JUnit: 'java.lang.IllegalStateException: ... MyErrorMessage ..' –

+0

Vâng, có thể cho trường hợp ngoại lệ được gói vào một cái khác, nhưng trong trường hợp đó bạn nên xác nhận _wrapper_ một, và không bao giờ cái kia. – Powerslave

1

Chỉ cần kiểm tra điều này trong JUnit4: công việc DO này, kiểm tra hoàn tất thành công. Hãy xem đây có phải là IllegalSelectorException hoặc các thiết bị như vậy.

6

tôi đã thử cái này và hoạt động hoàn hảo như mong đợi.

public class SampleClassTest { 
@Test(expected = ArithmeticException.class) 
public void lost(){ 
this.lost(0); 
} 
private void lost(int i) throws ArithmeticException { 
System.out.println(3/i); 
} 
} 

cũng đảm bảo rằng Junit4 được thêm vào như dependancy, @ (chú thích) là tính năng mới trong JUnit 4.

4

tôi phải đối mặt với cùng một vấn đề, giải pháp đơn giản là "Đừng kéo dài TestCase lớp"

7
@RunWith(JUnit4.class) 
public class MyTestCaseBase extends TestCase 

Tôi cũng gặp sự cố với @Test (expected = ...) chú thích khi tôi mở rộng lớp TestCase trong bài kiểm tra cơ sở của mình. Sử dụng @RunWith (JUnit4.class) đã giúp ngay lập tức (không phải là một giải pháp cực kỳ thanh lịch, tôi thừa nhận)

+0

Bạn không nên mở rộng TestCase nữa bằng JUnit4 +. –

0

Tôi đã có cùng một vấn đề tôi chỉ thay đổi các báo cáo nhập khẩu của mình. tôi loại bỏ:

import org.junit.jupiter.api.Test; 

import junit.framework.TestCase; 

và nói thêm:

import org.junit.Test; 

Và nó làm việc tốt cho tôi.

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