2012-01-27 40 views
47

Có thể nói trong mã nếu một đối tượng nhất định là một giả Mockito hay không?Làm cách nào để biết một đối tượng có phải là mô hình Mockito không?

Lý do tôi muốn thực hiện việc này là trả về một thông báo lỗi khác khi một mô hình được sử dụng. Điều này sẽ được sử dụng để gợi ý cho các nhà phát triển khác rằng họ nên sử dụng một mô hình được chuẩn bị trước đã được thiết lập để trả lời các cuộc gọi một cách hữu ích hơn là tạo ra bản thân giả.

Hiện tại, tốt nhất tôi có là object.getClass().getName().contains("EnhancerByMockitoWithCGLIB") nhưng điều này cảm thấy bị hack.

Trả lời

45

Hình như không có API như vậy (xin hãy giơ một vấn đề, nó nên được!) May mắn thay (sau bình luận của bạn dưới đây) có một phương pháp trong gói org.mockito.internal.util:

import org.mockito.internal.util.MockUtil; 

new MockUtil().isMock(obj) 

Trong phương pháp Mockito.isMock() tương lai có thể được thêm vào API công khai, xem: Issue 313: Provide isMock outside of org.mockito.internal).

+3

Tiếp theo từ câu trả lời của bạn, tôi đã xem [nguồn cho MockUtil] (https://fisheye2.atlassian.com/browse/mockito/trunk/src/org/mockito/internal/util/MockUtil.java? r = 2020) và trực tiếp theo phương thức 'isMockitoMock' riêng có phương thức' isMock' công khai mà dường như nó có thể được sử dụng. Tôi sẽ đăng trên danh sách gửi thư của Mockito để kiểm tra xem liệu có nên gọi các phương thức từ chính bản thân org.mockito.internal.util' hay không. – mikej

+0

Một trong những ý định của gói 'org.mockito.internal.util' là nhóm Mockito có thể thay đổi bất kỳ thứ gì trong gói này, trong một phiên bản mới hơn. Vì vậy, nếu bạn sử dụng gói này, các thử nghiệm của bạn có thể phá vỡ trong tương lai. Tuy nhiên, rất khó có khả năng chúng tôi sẽ loại bỏ phương pháp đặc biệt này, vì vậy tôi nói nó khá an toàn để sử dụng. –

+0

@mikej: 1, bằng cách nào đó tôi đã bỏ lỡ điều đó, cảm ơn! Tôi đã loại bỏ câu trả lời cũ và đưa ra đề xuất của bạn thay vào đó để nó nổi bật hơn. Hy vọng bạn không nhớ. –

32

Là một theo dõi, các API công cộng Mockito hiện nay có phương pháp này:

MockingDetails org.mockito.Mockito.mockingDetails(Object toInspect) 

Đó là kết quả của vấn đề này mà @ David Wallace nâng lên. Đối tượng trả về hỗ trợ các phương thức 'isMock()' cũng như 'isSpy()' và sau này có thể được tăng cường để cung cấp thêm thông tin liên quan đến giả.

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