2013-04-04 5 views
6

tôi có mã giống như vậy:Làm thế nào để giả lập giá trị trả lại của Bản đồ?

for (Map.Entry<Integer, Action> entry : availableActions.entrySet()) { 
    ... 
} 

tôi đã cố gắng để thử nó như thế này:

Map mockAvailableActions = mock(Map.class, Mockito.RETURNS_DEEP_STUBS); 
mockAvailableActions.put(new Integer(1), mockAction); 

Tôi nghĩ rằng đó sẽ là đủ. Nhưng entrySet trống. Vì vậy, tôi đã thêm điều này:

when(mockAvailableActions.entrySet().iterator()).thenReturn(mockIterator); 
when(mockIterator.next()).thenReturn(mockAction); 

Vẫn mục nhậpĐặt trống. Tôi đang làm gì sai? Cảm ơn mọi đầu vào!

Trả lời

11

Có lẽ tôi là thiếu một cái gì đó, nhưng tại sao không chỉ làm điều này:

Map.Entry<Integer, Action> entrySet = <whatever you want it to return> 
Map mockAvailableActions = mock(Map.class); 
when(mockAvailableActions.entrySet()).thenReturn(entrySet); 

Cũng xem xét liệu bạn có thực sự cần một bản đồ giả ở tất cả, sẽ không phải là một thực thực hiện công việc? Mocks thường được sử dụng để thay thế các phần khác của mã mà bạn không muốn tham gia vào thử nghiệm đơn vị của mình, Bản đồ là một phần của ngôn ngữ Java cốt lõi và thường không được mô phỏng.

+0

Vâng, đó là suy nghĩ đầu tiên của tôi. Nhưng "Map.Entry entrySet =" trông như thế nào? Entry không thể được instantiated, vì vậy tôi sẽ xác định biến? – user1660256

+0

http://stackoverflow.com/questions/3110547/java-how-to-create-new-entry-key-value –

+1

Bạn đã đúng Codebox - câu trả lời này không phải là giả lập Bản đồ. – user1660256