美文网首页
用Mockito实现Mocks Aren't Stubs的测试

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

作者: redexpress | 来源:发表于2020-06-30 10:54 被阅读0次

    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。

    相关文章

      网友评论

          本文标题:用Mockito实现Mocks Aren't Stubs的测试

          本文链接:https://www.haomeiwen.com/subject/bzvtqktx.html