2012-03-04 36 views
5

Tôi đang cố gắng để có được phương pháp verify trong Mockito để hoạt động. Tôi có bài kiểm tra sau:Xác minh Mockito Không Failing

@Test 
public void testShouldFail() 
{ 
    String string = mock(String.class); 
    string.length(); 
    verify(string, times(100)).length(); 
} 

Thử nghiệm này sẽ không thành công, nhưng nó vượt qua. Có ai biết tại sao không? Tôi có sử dụng Mockito sai không?

Cập nhật

Dưới đây là một ví dụ khác mà không thất bại:

private interface Bar 
{ 
    public void foo(); 
} 

@Test 
public void testShouldFail() 
{ 
    Bar bar = mock(Bar.class); 
    bar.foo(); 
    verify(bar, times(100)).foo(); 
} 
+0

Bạn bị liều ví dụ thứ hai khi thử nghiệm, bạn có thể cung cấp thêm chi tiết không? –

Trả lời

5

Vâng, bạn nên cẩn thận về điều đó: theo mặc định, bạn không thể thử các lớp học chính thức (như String) . This is a known limitation của khuôn khổ.

dụ của bạn không cho tôi với các thông báo lỗi thích hợp:

org.mockito.exceptions.base.MockitoException: 
Cannot mock/spy class java.lang.String 
Mockito cannot mock/spy following: 
    - final classes 
    - anonymous classes 
    - primitive types 
    at Test.testShouldFail(Test.java:6) 
     ... 

Vì vậy, tôi đoán có thể có một số vấn đề cấu hình nhỏ trong dự án của bạn. Bạn đang sử dụng IDE nào? Bạn có phiên bản Mockito nào? Làm thế nào để bạn chạy thử nghiệm của bạn?

Bạn có thể thử sử dụng một số bộ công cụ bổ sung như PowerMock giúp bạn overcome this limitation. Khung này có thể được sử dụng trong conjuction với Mockito khá dễ dàng.

Mặt khác, String là một phần của gói java.lang và tôi cho rằng có một số xác minh bảo mật bổ sung liên quan đến các lớp đó bởi máy ảo (không chắc chắn). Tôi không tin rằng bạn có thể giả lập (tức là, thao tác bytecode) của một lớp như vậy (ví dụ, bạn nhận được một lỗi biên dịch nếu bạn cố gắng đặt một cái gì đó trong gói java.*). Nhưng đây chỉ là một giả định từ phía tôi.

+0

Thành thật mà nói, tôi chỉ sử dụng 'String' làm ví dụ nhanh. Tuy nhiên, thật tốt khi biết Mockito có giới hạn đó. Tôi đã cập nhật câu hỏi của mình với một ví dụ khác không thành công. Tôi đang sử dụng Eclipse Indigo với Junit 4.8.2, Mockito 1.9.0 và PowerMock 1.4.11. – LandonSchropp

+0

Bạn có thể vui lòng bao gồm toàn bộ lớp học mà bạn đã thực hiện, bao gồm cả chỉ thị nhập không? Bạn có chắc là bạn đã thêm các tệp JAR bắt buộc vào dự án của mình không? – rlegendi

+0

Xin lỗi vì trả lời muộn. Có vẻ như bạn đã đúng. Tôi đã làm hỏng thư viện Mockito của mình khi thêm PowerMock. Vui lòng cập nhật câu trả lời của bạn để tôi có thể kiểm tra nó. Cảm ơn đã giúp đỡ. – LandonSchropp

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