`

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框架.zip

    "基于Java探针的Mock框架"可能是指一种结合了这两种技术的工具,它可能是为了提供更高级别的测试控制和深入的程序分析。 首先,我们来理解Java探针(Java Profiler)。Java探针通常包含以下功能: 1. **性能分析**...

    深入学习Java单元测试(Junit+Mock+代码覆盖率)

    深入学习Java单元测试(Junit+Mock+代码覆盖率) Java单元测试是软件测试的一种,旨在验证软件的正确性和可靠性。单元测试是编写测试代码,用来检测特定的、明确的、细颗粒的功能。单元测试并不一定保证程序功能是...

    mock junit4

    而Mockito则是Java领域中一款强大的模拟(mocking)工具,它允许我们在测试时隔离被测代码,避免依赖其他外部系统或组件的影响。本主题将深入探讨如何在JUnit4中结合Mockito进行单元测试。 一、JUnit4简介 JUnit4是...

    redis-mock-java:Java中Redis的内存中实现

    redis-mock-java 用纯Java编写的与内存Redis兼容的实现。 。地位安装专家&lt; dependency&gt; &lt; groupId&gt;org.rarefiedredis.redis&lt;/ groupId&gt; &lt; artifactId&gt;redis-java&lt;/ artifactId&gt; &lt; version&gt;0.0.5&lt;/ version&gt;&lt;/ ...

    Mock.java.zip

    在Java编程语言的学习过程中,`Mock.java.zip`这个压缩包显然包含了与Mocking相关的学习资料,特别是关于如何在Java中进行单元测试时模拟对象(Mock Objects)的技术。Mock Objects是测试驱动开发(TDD)和行为驱动...

    Mock

    在IT行业中,Mock工具有很多,比如Java中的Mockito、JMock,Python的unittest.mock库,JavaScript的Sinon.js等。这些工具提供了方便的方法来创建和管理Mock对象,使测试过程更加便捷。例如,Mockito允许开发者通过...

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

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

    mockServer,mock服务端

    MockServer 是一个强大的工具,主要用于在开发过程中模拟服务器行为,特别是在接口开发和测试阶段。它允许开发者在没有实际后端服务的情况下,创建模拟的HTTP和HTTPS服务器,以便于快速验证前端代码或者自动化测试。...

    单元测试与 Mock 方法

    Mock方法则是单元测试中的一个重要工具,用于模拟复杂系统中的依赖关系,以便孤立地测试目标代码。在本篇文章中,我们将深入探讨单元测试与Mock方法的相关知识点。 首先,让我们理解单元测试的基本概念。单元测试是...

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

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

    mockserver1.zip

    在软件开发中,尤其是在测试阶段,MockServer可以替代真实的后端服务,允许开发者在没有实际依赖的情况下进行单元测试和集成测试。这个“mockserver1.zip”文件包含了启动和使用MockServer所需的一些基本组件和配置...

    mock

    在Struts2中,有多种方式来实现Mock测试: 1. `junit怎么测试struts里的Action.htm`:这个文件名暗示了如何使用JUnit进行Struts2 Action的测试。JUnit是Java开发中最常用的单元测试框架,可以配合Mockito或EasyMock...

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

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

    支持http接口自由mock,可根据需要进行接口mock测试。

    对于“支持http接口自由mock,可根据需要进行接口mock测试”这一主题,我们可以深入探讨一下HTTP接口Mocking的概念、重要性以及如何使用工具如Moco进行实践。 HTTP接口Mocking是软件开发过程中的一个重要环节,特别...

    java 中UNIT测试学习

    JUnit是Java程序员用来进行单元测试的首选工具。它的主要目标是提供一个简单易用的接口,帮助开发者快速编写和执行测试用例,确保代码按照预期工作。JUnit支持注解(annotations),这使得测试代码更加简洁且易于...

    Mock是一个零侵入的服务端Mock平台,底层基于JVM Sandbox。相比于Fiddler、-mock-fe.zip

    Mock是一个强大的服务端模拟工具,它的核心特性是零侵入性,这意味着在你的实际项目代码中无需进行任何修改,即可实现服务的模拟。这极大地提高了开发效率,特别是在进行集成测试或者依赖于其他服务但又无法实时访问...

    Java单元测试Java单元测试Java单元测试Java单元测试

    文档“java单元测试培训提纲.doc”可能涵盖了以上各个知识点的详细讲解,而“JAVA单元测试工具比较.doc”可能对不同测试工具进行了深入的对比分析,包括它们的优缺点、适用场景等。 理解并熟练运用这些Java单元测试...

    Mock初学教程

    Mock技术在软件测试领域扮演着至关重要的角色,尤其是在单元测试过程中,它帮助我们模拟复杂的依赖关系,使得测试更加简单有效。本教程将详细介绍如何使用流行的Mock框架——Mockito,通过实际示例来逐步讲解其核心...

Global site tag (gtag.js) - Google Analytics