Martin Flowler 写了一片著名的关于单元测试的文章Mocks Aren't Stubs,这篇文章有点久远了,里面使用了JMock个EasyMock这两个mock测试框架来写测试用例,而现在mock测试框架大多数人会选用Mockito。本文补充使用Mockito的测试用例。
添加Mockito依赖:
如果是Maven工程,在pom.xml
添加如下依赖:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.3.3</version>
<scope>test</scope>
</dependency>
测试代码
import org.junit.Test;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
public class OrderMockitoTester {
private static final String TALISKER = "Talisker";
@Test
public void testFillingRemovesInventoryIfInStock() {
Order order = new Order(TALISKER, 50);
Warehouse warehouseMock = mock(Warehouse.class);
when(warehouseMock.hasInventory(TALISKER, 50)).thenReturn(true);
order.fill(warehouseMock);
assertTrue(order.isFilled());
verify(warehouseMock).remove(TALISKER, 50);
}
@Test
public void testFillingDoesNotRemoveIfNotEnoughInStock() {
Order order = new Order(TALISKER, 51);
Warehouse warehouseMock = mock(Warehouse.class);
when(warehouseMock.hasInventory(anyString(), anyInt())).thenReturn(false);
order.fill(warehouseMock);
assertFalse(order.isFilled());
}
}
可以看到Mockito代码比其它测试框架更简洁,更易读,测试框架建议首选Mockito。
网友评论