2014-12-22 13 views
6

Tôi có một đoạn mã, những gì tôi muốn thử nghiệm với Mockito:Làm thế nào để Mock instanceof trong Mockito

mockedClass instanceof SampleInterface 

Các mockedClass được chế nhạo lớp trừu tượng: MockedClass, và SampleInterface là một giao diện. Đây là điểm không thành công:

Validate.isTrue(mockedClass instanceof SampleInterface, "The mockedClass is not a SampleInterface"); 

Làm thế nào để thử mã này?

+0

Chỉ cần làm rõ, 'mockedClass' là một mô hình sơ thẩm của kiểu 'MockedClass' (tức là' mock (MockedClass.class) ') và' MockClass' triển khai 'SampleInterface'? – Jonathan

+0

Lớp thực hiện mockedClass thực hiện điều này SampleInterface. Tôi đã không viết một thông tin quan trọng: Đó là mockedClass là một lớp Tóm tắt, được chế giễu như mô hình (MockedClass.class). –

Trả lời

14

Có vẻ như bạn cần MockSettings.extraInterfaces.

MockedClass mockedClass = mock(MockedClass.class, 
    withSettings().extraInterfaces(SampleInterface.class)); 

Lưu ý rằng nó đi kèm với nhãn cảnh báo riêng của mình:

tính năng bí ẩn này nên được sử dụng rất thường xuyên. Đối tượng được thử nghiệm nên biết chính xác các cộng tác viên của nó & phụ thuộc. Nếu bạn tình cờ sử dụng nó thường xuyên hơn [sic], hãy đảm bảo rằng bạn đang thực sự tạo ra mã đơn giản, sạch sẽ & có thể đọc được.

Thay vào đó, hãy tạo giao diện để thử nghiệm mở rộng tất cả giao diện bạn muốn giả lập của mình triển khai và giả sử cách thông thường.

+0

withSettings() sẽ không biên dịch. Tôi nghĩ rằng tôi đang sử dụng một phiên bản cũ của Mockito, nơi withSettings() không có sẵn. –

+0

NHƯNG đây là những gì tôi đã tìm kiếm! –

+0

Rất vui được giúp đỡ! Những tính năng mới này là của Mockito 1.8, từ khoảng năm 2009, vì vậy nó có thể đáng để nâng cấp lên. Bản phát hành Mockito mới nhất là 1.10 và phiên bản 2.0 sắp ra mắt. –

0

Bên cạnh những câu trả lời khác:

Nếu có thể, bạn nên thử thay vì giao diện, nghĩa là tạo ra các mô hình như thế này:

SampleInterface mockedClass = mock(SampleInterface.class); // not mock(MockedClass) 
Các vấn đề liên quan