Tôi đang cố gắng tự dạy mình Mockito.Mockito "khi" vấn đề
Xem xét các phương pháp sau đây, hasInventory(), mà nên không thực sự chạy theo cách suy nghĩ của tôi, nhưng có được thiết lập để trở đúng hoặc sai như tôi lồng sóc thử nghiệm của tôi. Lớp Kho hàng là "phụ thuộc giả mạo" của tôi.
public class Warehouse implements IWarehouse
{
private Map< String, Integer > inventory;
public Warehouse()
{
this.inventory = new HashMap< String, Integer >();
}
public final boolean hasInventory(String itemname, int quantity)
throws InventoryDoesNotExistException
{
if(inventory == null)
throw new InventoryDoesNotExistException();
if(!inventory.containsKey(itemname))
return false;
int current = (inventory.containsKey(itemname)) ? inventory.get(itemname) : 0;
return(current >= quantity);
}
...
Trong mã kiểm tra JUnit, là người đầu tiên khi() ném một ngoại lệ vì nó theo nghĩa đen giải thích các lời gọi phương thức (thực hiện nó) và, hàng tồn kho là con số không (xem ở trên), InventoryDoesNotExistException là ném. Cũng có các phương pháp khác trong lớp phụ thuộc giả lập, như thêm() và xóa().
@RunWith(MockitoJUnitRunner.class)
public class OrderInteractionTest
{
private static final String TALISKER = "Talisker";
private Order systemUnderTest = null;
@Mock
private Warehouse mockedDependency = null;
@Before
public void init()
{
//MockitoAnnotations.initMocks(this);
//mockedDependency = mock(Warehouse.class);
this.systemUnderTest = new Order(TALISKER, 50);
}
@Test
public void testFillingRemovesInventoryIfInStock()
{
try
{
doNothing().doThrow(new RuntimeException()).when(mockedDependency).add(anyString(), anyInt());
doNothing().doThrow(new RuntimeException()).when(mockedDependency).remove(anyString(), anyInt());
when(mockedDependency.hasInventory(anyString(), anyInt())).thenReturn(true);
when(mockedDependency.getInventory(anyString())).thenReturn(50);
Theo tôi được biết, do khi() phương pháp, tôi đang hỏi Mockito chính xác không gọi hasInventory(), nhưng chỉ để trở đúng thay vì bất cứ khi nào nó được gọi như tôi thử nghiệm lớp ("systemUnderTest"). Bất cứ ai có thể giúp tôi vượt qua thời điểm này (hoặc nhận được một số ý nghĩa vào bộ não của tôi)?
Tôi đang liên kết Mockito-all-1.8.5.jar và JUnit 4.
nhờ dồi dào cho tất cả người đọc.
Russ
Ha! Vâng, đó là vấn đề. Trong thực tế, tôi đã đọc điều gì đó về điều này sớm hơn, nhưng tôi đã không tạo ra kết nối. Để bắt chước các hướng dẫn khác, tôi đã bắt đầu giả lập IWarehouse và điều đó đang hoạt động, vì vậy tôi nghĩ rằng tôi chỉ có thể giả lập giao diện (tôi đã nói chuyện với ai đó một vài tuần trước, người đã nói với tôi rằng tôi có thể thử các lớp đơn giản, vì vậy tôi đã không cố gắng để giả lập giao diện kể từ khi tôi tìm thấy trong nhiều tình huống thực tế, tôi thậm chí sẽ không có giao diện). Nhưng đây là câu trả lời đúng! Cảm ơn bạn rất nhiều cho việc này. –