`

Java Mock测试工具

    博客分类:
  • Test
阅读更多
mockito
<dependency>
  <groupId>org.mockito</groupId>
  <artifactId>mockito-core</artifactId>
  <version>2.21.0</version>
  <scope>test</scope>
</dependency>

 

import org.junit.Rule;
import org.junit.Test;
import org.mockito.InOrder;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;

import java.util.Arrays;

import static org.mockito.Mockito.*;

public class ExampleTest {

    @Rule public MockitoRule rule = MockitoJUnit.rule();

    @Mock private ArticleCalculator mockCalculator;
    @Mock private ArticleDatabase mockDatabase;

    @InjectMocks private ArticleManager articleManager;

    @Test
    public void managerCountsArticlesAndSavesThemInTheDatabase() {
        when(mockCalculator.countArticles("Guardian")).thenReturn(12);
        when(mockCalculator.countArticlesInPolish(anyString())).thenReturn(5);

        articleManager.updateArticleCounters("Guardian");

        verify(mockDatabase).updateNumberOfArticles("Guardian", 12);
        verify(mockDatabase).updateNumberOfPolishArticles("Guardian", 5);
        verify(mockDatabase).updateNumberOfEnglishArticles("Guardian", 7);
    }

    @Test
    public void managerCountsArticlesUsingCalculator() {
        articleManager.updateArticleCounters("Guardian");

        verify(mockCalculator).countArticles("Guardian");
        verify(mockCalculator).countArticlesInPolish("Guardian");
    }

    @Test
    public void managerSavesArticlesInTheDatabase() {
        articleManager.updateArticleCounters("Guardian");

        verify(mockDatabase).updateNumberOfArticles("Guardian", 0);
        verify(mockDatabase).updateNumberOfPolishArticles("Guardian", 0);
        verify(mockDatabase).updateNumberOfEnglishArticles("Guardian", 0);
    }

    @Test
    public void managerUpdatesNumberOfRelatedArticles() {
        Article articleOne = new Article();
        Article articleTwo = new Article();
        Article articleThree = new Article();

        when(mockCalculator.countNumberOfRelatedArticles(articleOne)).thenReturn(1);
        when(mockCalculator.countNumberOfRelatedArticles(articleTwo)).thenReturn(12);
        when(mockCalculator.countNumberOfRelatedArticles(articleThree)).thenReturn(0);

        when(mockDatabase.getArticlesFor("Guardian")).thenReturn(Arrays.asList(articleOne, articleTwo, articleThree));

        articleManager.updateRelatedArticlesCounters("Guardian");

        verify(mockDatabase).save(articleOne);
        verify(mockDatabase).save(articleTwo);
        verify(mockDatabase).save(articleThree);
    }

    @Test
    public void shouldPersistRecalculatedArticle() {
        Article articleOne = new Article();
        Article articleTwo = new Article();

        when(mockCalculator.countNumberOfRelatedArticles(articleOne)).thenReturn(1);
        when(mockCalculator.countNumberOfRelatedArticles(articleTwo)).thenReturn(12);

        when(mockDatabase.getArticlesFor("Guardian")).thenReturn(Arrays.asList(articleOne, articleTwo));

        articleManager.updateRelatedArticlesCounters("Guardian");

        InOrder inOrder = inOrder(mockDatabase, mockCalculator);

        inOrder.verify(mockCalculator).countNumberOfRelatedArticles((Article) anyObject());
        inOrder.verify(mockDatabase, atLeastOnce()).save((Article) anyObject());
    }
}

 

EasyMock

<dependency>
  <groupId>org.easymock</groupId>
  <artifactId>easymock</artifactId>
  <version>3.6</version>
  <scope>test</scope>
</dependency>

 

import static org.easymock.EasyMock.*;
import org.easymock.*;
import org.junit.*;

public class ExampleTest extends EasyMockSupport {

    @Rule
    public EasyMockRule rule = new EasyMockRule(this);

    @Mock
    private Collaborator collaborator; // 1

    @TestSubject
    private ClassTested classUnderTest = new ClassTested(); // 2

    @Test
    public void addDocument() {
        collaborator.documentAdded("New Document"); // 3
        replayAll(); // 4
        classUnderTest.addDocument("New Document", "content"); // 5
        verifyAll(); // 6
    }
}

 

  1. Create the mock
  2. Have it set to the tested class
  3. Record what we expect the mock to do
  4. Tell all mocks we are now doing the actual testing
  5. Test
  6. Make sure everything that was supposed to be called was called

PowerMock

PowerMock is a framework that extend other mock libraries such as EasyMock with more powerful capabilities. PowerMock uses a custom classloader and bytecode manipulation to enable mocking of static methods, constructors, final classes and methods, private methods, removal of static initializers and more. By using a custom classloader no changes need to be done to the IDE or continuous integration servers which simplifies adoption. Developers familiar with the supported mock frameworks will find PowerMock easy to use, since the entire expectation API is the same, both for static methods and constructors. PowerMock aims to extend the existing API's with a small number of methods and annotations to enable the extra features. Currently PowerMock supports EasyMock and Mockito.

PowerMock简介

分享到:
评论

相关推荐

    Java单元测试增强工具源码,换种思路写Mock,让单元测试更简单

    Java单元测试增强工具源码,换种思路写Mock,让单元测试更简单 构建项目 主项目使用JDK 1.6+和Maven 3+版本构建,其中demo子项目需要JDK 1.8+版本。 mvn clean install 本地生成文档 docsify serve docs ...

    VUE+mock测试+农业计算工具

    在java web应用中,进行用例实现时,很多情况难以模拟,比如数据库用例,如果直接通过连接数据库进行测试,导致用例对环境依赖很大,这时,可以通过mock技术可以模拟构造数据环境,从而进行单元测试,这里提供有实现...

    javabiginteger源码-mock:java版的可以模拟任意数据的工具

    在后端接口没有完成时需要返回模拟数据,测试时也需要模拟数据,于是需要一个可以模拟任意数据的工具,企业开发种从头写自己实现是不现实的,太浪费时间,于是github找了一个适合的进行修改,于是有了现在的mock。...

    最全面的Java接口自动化测试实战.zip

    E:\最全面的Java接口自动化测试实战\第4章 企业级代码管理工具git的应用 E:\最全面的Java接口自动化测试实战\第5章 测试框架TestNG E:\最全面的Java接口自动化测试实战\第6章 测试报告 E:\最全面的Java接口自动化...

    Mockcat是一款前端与后台分离开发的简易接口Mock数据工具集

    提供了Mock数据的模块化管理,接口的定义和测试(支持JSON5/XML文档格式、Mock.js的语法规则),Mock数据的操作日志,以及接口的Mock服务功能。另外,提供了开发中常用的工具,还收藏了一些工具类的网站。

    最全面的Java接口自动化测试实战.docx

    E:\最全面的Java接口自动化测试实战\第4章 企业级代码管理工具git的应用 E:\最全面的Java接口自动化测试实战\第5章 测试框架TestNG E:\最全面的Java接口自动化测试实战\第6章 测试报告 E:\最全面的Java接口自动化...

    java8集合源码分析-java-agent:基于java5Instrumentapi实现的mock框架

    单元测试mock 联调、集成测试mock 支持mock静态方法,final方法,私有方法 非常容易实现spring bean的mock 支持对dubbo接口的mock 1.2 原理 java5引入了一个api,叫做Instrument,它支持在jvm启动时拦截类的加载, ...

    JMock 2.6.1所有源代码

    Mock测试主要是用来模拟那些在应用中不容易构造(如HttpServletRequest必须在Servlet容器中才能构造出来)或者比较复杂的对象(如JDBC中的ResultSet对象),从而使测试顺利进行的工具。JMock是基于JAVA编写的Mock...

    grpcmock:一个gRPC Java测试工具,可以轻松模拟gRPC服务的端点,以进行IT或单元测试

    gRPC模拟 一个gRPC Java测试工具,可以轻松地模拟gRPC服务的端点,以进行IT或单元测试。 该工具采用类似于HTTP服务DSL类型的结构。特征可通过流畅的Java API配置的gRPC方法存根标头和请求正文匹配器以确定正确的存根...

    更先进的 API 设计/开发/测试工具 Apifox = Postman + Swagger + Mock + JMeter

    API 文档、API 调试、API Mock、API 自动化测试 更先进的 API 设计/开发/测试工具 Apifox = Postman + Swagger + Mock + JMeter 一套系统、一份数据,解决多个 API 工具之间的数据同步问题 只要定义好 API 文档,API...

    单元测试与 Mock 方法

    NULL 博文链接:https://username2.iteye.com/blog/1812762

    powermock:单体测试mock工具

    单体测试工具,优点是能mock静态、final、私有方法等其他mock工具不具备的特点 1.重要注解一 @RunWith(PowerMockRunner.class) 2.重要注解二 @PrepareForTest({YourClass}) 3.包括实例有普通Mock,Mock方法内部new...

    javabiginteger源码-data-mocker:数据模拟者

    在后端接口没有完成时需要返回模拟数据,测试时也需要模拟数据,于是需要一个可以模拟任意数据的工具,企业开发种从头写自己实现是不现实的,太浪费时间,于是github找了一个适合的进行修改,于是有了现在的mock。...

    redis-mock-0.1.6.jar

    redis-mock是一个专门为Redis设计的单元测试工具,它能在不需要连接真实Redis服务器的情况下,提供redis-mock是一个专门为Redis设计的单元测试工具,它能在不需要连接真实Redis服务器的情况下,提供模拟的Redis数据...

    使用JMockit编写java单元测试

    之前《有效使用Mock编写java单元测试》一文中层介绍过使用EasyMock和PowerMock来编写java单元测试,今天介绍一个更加强大的工具——JMockit。引用单元测试中mock的使用及mock神器jmockit实践中的java单元测试中各种...

    最简单、最好用的mock工具

    java -jar moco-runner-&lt;version&gt;.jar http -p &lt;port&gt; -c moco-config.json

    kb-proxy:kb-proxy 是一个可本地部署的、提供代理功能、接口测试管理、支持在线Mock、Host环境管理的在线工具平台

    kb-proxy 是一个可本地部署的、提供代理功能、接口测试管理、支持在线Mock、Host环境管理的在线工具平台。 使用教程 功能介绍 代理工具:支持HTTP\HTTPS请求抓包 接口测试:支持HTTP\HTTPS请求接口测试和管理 Mock...

    moco-runner-0.11.1-standalone

    moco是一个简单搭建模拟服务器的程序库/工具,主要用于测试集成,moco-runner-0.11.1-standalone。

Global site tag (gtag.js) - Google Analytics