用Mockito实现Mocks Aren't Stubs的测试

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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。