<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()); } }
<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 } }
- Create the mock
- Have it set to the tested class
- Record what we expect the mock to do
- Tell all mocks we are now doing the actual testing
- Test
- Make sure everything that was supposed to be called was called
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.
相关推荐
Java单元测试增强工具源码,换种思路写Mock,让单元测试更简单 构建项目 主项目使用JDK 1.6+和Maven 3+版本构建,其中demo子项目需要JDK 1.8+版本。 mvn clean install 本地生成文档 docsify serve docs ...
在java web应用中,进行用例实现时,很多情况难以模拟,比如数据库用例,如果直接通过连接数据库进行测试,导致用例对环境依赖很大,这时,可以通过mock技术可以模拟构造数据环境,从而进行单元测试,这里提供有实现...
在后端接口没有完成时需要返回模拟数据,测试时也需要模拟数据,于是需要一个可以模拟任意数据的工具,企业开发种从头写自己实现是不现实的,太浪费时间,于是github找了一个适合的进行修改,于是有了现在的mock。...
E:\最全面的Java接口自动化测试实战\第4章 企业级代码管理工具git的应用 E:\最全面的Java接口自动化测试实战\第5章 测试框架TestNG E:\最全面的Java接口自动化测试实战\第6章 测试报告 E:\最全面的Java接口自动化...
提供了Mock数据的模块化管理,接口的定义和测试(支持JSON5/XML文档格式、Mock.js的语法规则),Mock数据的操作日志,以及接口的Mock服务功能。另外,提供了开发中常用的工具,还收藏了一些工具类的网站。
E:\最全面的Java接口自动化测试实战\第4章 企业级代码管理工具git的应用 E:\最全面的Java接口自动化测试实战\第5章 测试框架TestNG E:\最全面的Java接口自动化测试实战\第6章 测试报告 E:\最全面的Java接口自动化...
单元测试mock 联调、集成测试mock 支持mock静态方法,final方法,私有方法 非常容易实现spring bean的mock 支持对dubbo接口的mock 1.2 原理 java5引入了一个api,叫做Instrument,它支持在jvm启动时拦截类的加载, ...
Mock测试主要是用来模拟那些在应用中不容易构造(如HttpServletRequest必须在Servlet容器中才能构造出来)或者比较复杂的对象(如JDBC中的ResultSet对象),从而使测试顺利进行的工具。JMock是基于JAVA编写的Mock...
gRPC模拟 一个gRPC Java测试工具,可以轻松地模拟gRPC服务的端点,以进行IT或单元测试。 该工具采用类似于HTTP服务DSL类型的结构。特征可通过流畅的Java API配置的gRPC方法存根标头和请求正文匹配器以确定正确的存根...
API 文档、API 调试、API Mock、API 自动化测试 更先进的 API 设计/开发/测试工具 Apifox = Postman + Swagger + Mock + JMeter 一套系统、一份数据,解决多个 API 工具之间的数据同步问题 只要定义好 API 文档,API...
NULL 博文链接:https://username2.iteye.com/blog/1812762
单体测试工具,优点是能mock静态、final、私有方法等其他mock工具不具备的特点 1.重要注解一 @RunWith(PowerMockRunner.class) 2.重要注解二 @PrepareForTest({YourClass}) 3.包括实例有普通Mock,Mock方法内部new...
在后端接口没有完成时需要返回模拟数据,测试时也需要模拟数据,于是需要一个可以模拟任意数据的工具,企业开发种从头写自己实现是不现实的,太浪费时间,于是github找了一个适合的进行修改,于是有了现在的mock。...
redis-mock是一个专门为Redis设计的单元测试工具,它能在不需要连接真实Redis服务器的情况下,提供redis-mock是一个专门为Redis设计的单元测试工具,它能在不需要连接真实Redis服务器的情况下,提供模拟的Redis数据...
之前《有效使用Mock编写java单元测试》一文中层介绍过使用EasyMock和PowerMock来编写java单元测试,今天介绍一个更加强大的工具——JMockit。引用单元测试中mock的使用及mock神器jmockit实践中的java单元测试中各种...
java -jar moco-runner-<version>.jar http -p <port> -c moco-config.json
kb-proxy 是一个可本地部署的、提供代理功能、接口测试管理、支持在线Mock、Host环境管理的在线工具平台。 使用教程 功能介绍 代理工具:支持HTTP\HTTPS请求抓包 接口测试:支持HTTP\HTTPS请求接口测试和管理 Mock...
moco是一个简单搭建模拟服务器的程序库/工具,主要用于测试集成,moco-runner-0.11.1-standalone。