2010-11-18 2 views
11

Làm cách nào để có thể tạo phương thức sao cho khi đưa ra giá trị mà tôi không mong đợi, nó trả về giá trị mặc định?Đặt giá trị mặc định trong Mockito

Ví dụ:

Map<String, String> map = mock(Map.class); 
when(map.get("abcd")).thenReturn("defg"); 
when(map.get("defg")).thenReturn("ghij"); 
when(map.get(anyString())).thenReturn("I don't know that string"); 

Phần 2: Như trên nhưng ném một ngoại lệ:

Map<String, String> map = mock(Map.class); 
when(map.get("abcd")).thenReturn("defg"); 
when(map.get("defg")).thenReturn("ghij"); 
when(map.get(anyString())).thenThrow(new IllegalArgumentException("I don't know that string")); 

Trong ví dụ trên, các cuống phiếu cuối cùng được ưu tiên nên bản đồ sẽ luôn luôn trở về mặc định.

+0

và câu hỏi là gì? – Bozho

Trả lời

21

Giải pháp tốt nhất mà tôi đã tìm thấy là để đảo ngược thứ tự của các cuống:

Map<String, String> map = mock(Map.class); 
when(map.get(anyString())).thenReturn("I don't know that string"); 
when(map.get("abcd")).thenReturn("defg"); 
when(map.get("defg")).thenReturn("ghij"); 

Khi mặc định là để ném một ngoại lệ bạn chỉ có thể sử dụng doThrow và doReturn

doThrow(new RuntimeException()).when(map).get(anyString()); 
doReturn("defg").when(map).get("abcd"); 
doReturn("ghij").when(map).get("defg"); 

http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#doReturn%28java.lang.Object%29

+1

Cảm ơn câu trả lời kỹ lưỡng bao gồm 'doReturn()'. ('doThrow()' là không cần thiết trong trường hợp này ngoại trừ sự nhất quán.) – David

2
when(map.get(anyString())).thenAnswer(new Answer<String>() { 
    public String answer(Invocation invocation) { 
     String arg = (String) invocation.getArguments()[0]; 
     if (args.equals("abcd") 
      return "defg"; 
     // etc. 
     else 
      return "default"; 
      // or throw new Exception() 
    } 
}); 

Đó là một cách vòng xoay để thực hiện việc này. Nhưng nó sẽ hoạt động.

2

Bạn có thể sử dụng:

Map<String, String> map = mock(Map.class, new Returns("I don't know that string")); 
when(map.get("abcd")).thenReturn("defg"); 
when(map.get("defg")).thenReturn("ghij");