2012-01-24 26 views
7

Trong ví dụ sau:Đảm bảo phương pháp không chế giễu không được gọi trong Mockito

Execution execution = mock(Execution.class); 
    when(execution.getLastQty()).thenReturn(1000.0); 
    when(execution.getLastPrice()).thenReturn(75.0); 

    order.onFillReceived(execution); 

    assertEquals(0, order.getLeavesQty(), 0); 

Thực hiện có nhiều phương pháp khác mà không nên được gọi. Chỉ có hai phương pháp đã được chế nhạo nên được sử dụng trong thử nghiệm này và nên được gọi. Nếu bất kỳ phương thức nào khác được gọi, thì thử nghiệm sẽ thất bại.

Làm cách nào để yêu cầu Mockito thất bại nếu có bất kỳ phương pháp nào khác được gọi?

+1

Tại sao bạn muốn? Nếu lớp 'Order' xảy ra để gọi các phương thức khác của lớp' Execution', và nó không ảnh hưởng đến kết quả của hành vi mà bạn đang thử nghiệm, thì tại sao bạn muốn thử nghiệm thất bại? –

+0

Trong trường hợp cụ thể này ... hãy nói rằng order.onFillReceived gió lên chỉ định order.getLeavesQty dựa trên phương thức từ execution.getWrongQty(). Bởi vì getWrongQty sẽ trả về giá trị mặc định cho phương thức đó (0), khẳng định sẽ vẫn làm việc ngay cả khi getLeavesQty không được thiết lập bởi giá trị đúng. Điều này chỉ vì giá trị mặc định cho các giá trị sai có cùng giá trị với giá trị được xác nhận trong thử nghiệm. – user465342

+0

Tôi không thực sự tuân theo điều đó. Nhưng nó sẽ không được sạch hơn để lựa chọn giá trị cho các thử nghiệm mà không thể dễ dàng xảy ra do tai nạn? Vì vậy, nếu kiểm tra vượt qua, bạn biết rằng việc tính toán đã xảy ra chính xác. Nếu thử nghiệm không chứng minh rằng giá trị chính xác đã được tính toán (thay vì xảy ra do tai nạn), tôi sẽ đặt câu hỏi về giá trị của thử nghiệm. –

Trả lời

8

documentation trình bày điều này một cách rõ ràng. Bạn muốn gọi verifyNoMoreInteractions, hoặc là sau khi gọi verify (theo tài liệu) hoặc

verify(execution).getLastQty(); 
verify(execution).getLastPrice(); 
verifyNoMoreInteractions(execution); 

hoặc sử dụng ignoreStubs:

verifyNoMoreInteractions(ignoreStubs(execution)); 
+0

Việc thêm này không thành công khi thử nghiệm phàn nàn rằng ... Không có tương tác nào muốn ở đây. – user465342

+0

Ở phía bên trái ... nếu ignoreStubs được sử dụng (có sẵn trong 1.9), công cụ trên hoạt động chính xác. Mã thực tế là verifyNoMoreInteractions (ignoreStubs (thực thi)); – user465342

+0

@ user465342: Điều đó phụ thuộc vào những gì bạn đang cố gắng làm. Bạn đã không hiển thị những gì 'onFillReceived' nào - Tôi nghi ngờ rằng nếu nó chỉ gọi' getLastQty() 'và' getLastPrice() 'một lần, thì điều trên sẽ là tốt, tôi tin. Nhưng có, nếu bạn muốn đối xử với những người như là phương pháp sơ khai thì 'ignoreStubs' trông giống như cách đi đúng đắn. –

0

Bạn có thể thử những không bao giờ phương pháp nếu phù hợp với các trường hợp sử dụng:

tức là

verify(execution, never()).someOtherMethod(); 
Các vấn đề liên quan