2011-09-06 23 views
55

Tôi đang cố gắng đâm xuyên qua bức tường gạch giữa tôi và Mockito. Tôi đã rách tóc ra để cố gắng nhập báo cáo tĩnh tĩnh cho công cụ Mockito. Bạn sẽ nghĩ rằng ai đó sẽ chỉ ném lên một bảng nói rằng anyInt() đến từ org.mockito.Matcherskhi() đến từ org.mockito.Mockito, vv, nhưng đó sẽ là quá hữu ích cho người mới đến, phải không?Tìm báo cáo tĩnh nhập cho cấu trúc Mockito

này đại loại như vậy, đặc biệt khi trộn lẫn với báo cáo nhập khẩu nhiều vô số kết thúc bằng dấu sao, không phải lúc nào cũng rất hữu ích:

import static org.junit.Assert.*; 
import static org.mockito.Mockito.*; 

Vâng, tôi biết và đã cố gắng để sử dụng Eclipse Window -> Preferences-> Java -> Editor-> Content Assist -> Cơ chế yêu thích. Nó giúp, nhưng nó không chạm vào móng trên đầu.

Bất kỳ câu trả lời nào cho câu hỏi này đều sẽ được đánh giá cao.

Rất cám ơn, Russ

+0

Xin lỗi vì đã giật cộng đồng xung quanh: bài ban đầu của tôi cũng đã hỏi một câu hỏi khác, nhưng tôi phát hiện ra rằng đó là một cái gì đó sai trái với mã của tôi, do thiếu dấu ngoặc đơn, vì vậy tôi đã loại bỏ bit đó. –

+0

Bạn đang tìm kiếm một cheatsheet? Chúng ta có thể roi lên một cái? Có gì thiếu về api? http://mockito.googlecode.com/svn/branches/1.6/javadoc/index.html?org/mockito/Matchers.html –

+2

Vì vậy, bạn phải hiểu rằng tôi tôn giáo tránh dấu hoa thị trong các câu lệnh nhập vì thấy loại điều ở trên cùng của mã chỉ có nghĩa là nó vô vọng để biết nơi một biểu tượng đến từ và, do đó, không có cách nào để tìm ra những gì JAR để bao gồm trong dự án của tôi. Tìm kiếm Javadoc trong trình duyệt không phải là quá tốt cho việc tìm kiếm các biểu tượng. Vâng, một trang lừa đảo sẽ thực sự tốt đẹp, nhưng là một đồng nghiệp và tôi đang thảo luận vừa rồi, đây là một trong những vấn đề mà bạn nghĩ cộng đồng Java sẽ giải quyết ngay bây giờ. Cảm ơn - hãy cho tôi biết nếu bạn làm. –

Trả lời

15

Vấn đề là hàng nhập khẩu từ tĩnh Hamcrest và Mockito có tên tương tự, nhưng trở lại quẹt thật giá trị, tương ứng.

Một công việc xung quanh là chỉ cần sao chép các lớp Hamcrest và/hoặc Mockito và xóa/đổi tên các hàm tĩnh để chúng dễ nhớ và ít hiển thị hơn trong tự động hoàn tất. Đó là những gì tôi đã làm.

Ngoài ra, khi sử dụng mocks, tôi cố gắng tránh assertThat có lợi cho các khác assertionsverify, ví dụ:

assertEquals(1, 1); 
verify(someMock).someMethod(eq(1)); 

thay vì

assertThat(1, equalTo(1)); 
verify(someMock).someMethod(eq(1)); 

Nếu bạn loại bỏ các lớp từ yêu thích của bạn trong Eclipse, và gõ ra tên dài ví dụ org.hamcrest.Matchers.equalTo và thực hiện CTRL + SHIFT + M để 'Thêm Nhập', sau đó tự động hoàn tất sẽ chỉ hiển thị cho bạn đối sánh Hamcrest, không phải bất kỳ đối sánh Mockito nào. Và bạn có thể làm điều này theo cách khác, miễn là bạn không trộn lẫn nhau.

+1

Yup, bạn đã đóng đinh một trong những khiếu nại của tôi với tư cách là một người mới: Tôi không chắc chắn giao diện từ đâu (JUnit, khuôn mẫu giả, Hamcrest, v.v.) Tôi dành nhiều thời gian hơn để cố gắng ghép một dự án từ JAR thực sự cần phải có (hơn bao giờ tôi đã trở lại trong ngày định vị giao diện C từ thư viện và các tập tin tiêu đề). –

+0

Bạn có thể tẩy uế hơn về lý do tại sao bạn tránh assertĐó: Tôi chưa nghĩ đủ về nó, nhưng tôi chỉ đang cố gắng để viết vào các bài kiểm tra viết với mocks và điều xác minh là mới đối với tôi. Cảm ơn. –

+0

Được rồi, tôi có một giải pháp khác cho bạn. Hy vọng rằng sẽ giúp! –

85

Đây là những gì tôi đã làm để đối phó với tình huống.

Tôi sử dụng nhập khẩu toàn cầu vào một lớp thử nghiệm mới.

import static org.junit.Assert.*; 
import static org.mockito.Mockito.*; 
import static org.mockito.Matchers.*; 

Khi bạn viết xong bài kiểm tra và cần cam kết, bạn chỉ cần CTRL + SHIFT + O để sắp xếp các gói. Ví dụ: bạn có thể chỉ còn lại:

import static org.mockito.Mockito.doThrow; 
import static org.mockito.Mockito.mock; 
import static org.mockito.Mockito.verify; 
import static org.mockito.Mockito.when; 
import static org.mockito.Matchers.anyString; 

Điều này cho phép bạn mã hóa mà không bị 'kẹt' khi tìm gói chính xác cần nhập.

+6

tôi sẽ upvote này hai lần nếu tôi có thể! – Justin

+0

Đối với người dùng máy Mac, thay vì CTRL + SHIFT + O làm [lệnh + shift + O] (https://blog.codecentric.de/en/2012/08/my-top-10-shortcuts-for-eclipse-on -mac-os-x-và-windows-và-cách-bạn-tồn tại-the-change-from-windows-to-mac/# comment-165299) –

+0

Nhược điểm của việc sử dụng vĩnh viễn những thứ như 'nhập static org .junit.Assert. *; 'trong các lớp thử nghiệm của bạn (không thay thế chúng bằng' ctrl' + 'shift' +' O' ở cuối)? – mkasberg

0

Đối là()

import static org.hamcrest.CoreMatchers.*; 

Đối assertThat()

import static org.junit.Assert.*; 

Đối với khi() và xác minh()

import static org.mockito.Mockito.*; 
Các vấn đề liên quan