首先,我的问题是:有一长串的数据处理流程,在最后一部分的处理中需要调另一个平台的接口并依赖该接口的返回做剩下的处理,而本地自己单元测试调不到。(不要说将接口返回参数直接写死,这样不太好,虽然我在没有使用 Mockito 时就是这样做的。)既然已经接触了 Mockito 那就用它来解决问题。
不了解 Mockito 是什么?没关系,看看这篇:http://liuzhijun.iteye.com/blog/1512780。
我准备了一些有趣的类来完成我的测试:OrderCreate.java,OrderHelper.java,MockSpringTest.java。
package com.practice.mock import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * mock 测试准备类 * * @author tiger * @version 1.0.0 createTime: 14/12/27 下午8:57 * @see com.practice.mock.OrderHelper * @since 1.6 */ @Component public class OrderCreate { @Autowired private OrderHelper orderHelper; public void create() { System.out.println(getAmt()); System.out.println(orderHelper.resolve()); } public int getAmt() { return 10; } }
package com.practice.mock; import org.springframework.stereotype.Component; /** * mock 测试准备类 * * @author tiger * @version 1.0.0 createTime: 14/12/27 下午8:59 * @since 1.6 */ @Component public class OrderHelper { public String resolve() { return "resolve order"; } }
package com.practice.mock; import com.practice.mock.BaseSpringTest; import org.junit.Before; import org.junit.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.util.ReflectionTestUtils; import static org.mockito.Mockito.*; /** * mock 测试 * * <p>spinrg + mock 测试的例子 * * @author tiger * @version 1.0.0 createTime: 15-1-8 下午5:07 * @since 1.6 */ public class MockSpringTest extends BaseSpringTest { @InjectMocks private OrderCreate orderCreate = mock(OrderCreate.class); @Mock private OrderHelper orderHelper; @Before public void initMocks() throws Exception { MockitoAnnotations.initMocks(this); doReturn(11).when(orderCreate).getAmt(); doReturn("success").when(orderHelper).resolve(); doCallRealMethod().when(orderCreate).create(); } @Test public void create() { System.out.println("start mock..."); orderCreate.create(); } }
输出的结果是:
start mock... 11 success
OrderCreate 的 getAmt 方法和 OrderHelper 的 resolve 方法被成功 mock 掉。
说明一下:@InjectMocks 会给 OrderCreate 装配 orderHelper 属性,其实就是根据 @Mock 来着啊。在下面这句代码执行完后
MockitoAnnotations.initMocks(this);
把被 mock 掉的 OrderHelper 给了 OrderCreate 的私有属性 orderHelper。这里 OrderCreate 本身也是被 mock 掉了。
好,稍微觉得 Mockito 有点意思了吧,但这还没解决我的需求,在我开始 mock 处理时我前面还有一长串的处理。
那我再加几个有趣的类吧:OrderBefore.java,OrderStart.java。
package com.practice.mock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * mock 测试准备类 * * @author tiger * @version 1.0.0 createTime: 15-1-8 下午7:51 * @since 1.6 */ @Component public class OrderBefore { @Autowired private OrderStart orderStart; public void before(){ System.out.println("before..."); orderStart.start(); } }
package com.practice.mock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * mock 测试准备类 * * @author tiger * @version 1.0.0 createTime: 15-1-8 下午7:51 * @since 1.6 */ @Component public class OrderStart { @Autowired private OrderCreate orderCreate; public void start(){ System.out.println("start..."); orderCreate.create(); } }
单元测试类 MockSpringTest 的代码变成了这样:
public class MockSpringTest extends BaseSpringTest { @Autowired private OrderBefore orderBefore; @InjectMocks private OrderCreate orderCreate = mock(OrderCreate.class); @Mock private OrderHelper orderHelper; @Before public void initMocks() throws Exception { MockitoAnnotations.initMocks(this); doReturn(11).when(orderCreate).getAmt(); doReturn("success").when(orderHelper).resolve(); doCallRealMethod().when(orderCreate).create(); } @Test public void create() { System.out.println("start mock..."); orderBefore.before(); } }
猜一下会输出什么。
输出结果:
start mock... before... start... 10 resolve order
相关推荐
spring集成TestNG与Mockito框架单元测试方法,方便学习者能快速上手如何单测,对自己的代码能够有质量保证。
spring集成TestNG与Mockito框架单元测试方法
NULL 博文链接:https://bert82503.iteye.com/blog/2106577
使用 MockMvc、Mockito 和 DbUnit 进行单元和集成测试灵感Spring MVC 测试教程 - Spring MVC 中的异常处理 - 下一步如果您对测试生成 HTML 的控制器感兴趣,您可以查看 Spring MVC 测试教程( )并了解如何测试由...
第16章:有别于一般书籍的单元测试内容,本书以当前最具实战的JUnit4+Unitils+ Mockito复合测试框架对如何测试数据库、Web的应用进行了深入的讲解。 第17章:以一个实际的项目为蓝本,带领读者从项目需求分析、...
HttpClientKit可以轻松地将请求发送到集成测试中的控制器。 WireMockKit可以轻松地在集成测试中对我们的第三方依赖WireMockKit进行存根。 您可以在项目中使用这些类。 实施了一个样例项目customer-service ,以...
Spring Test & Spring Boot Test:为 Spring Boot 应用提供集成测试和工具支持 AssertJ:支持流式断言的 Java 测试框架 Hamcrest:一个匹配器库 Mockito:一个 java mock 框架 JSONassert:一个针对 JSON 的断言...
该项目还包括每个层(服务和控制器)的单元测试文件。 该项目还使用Jacoco库生成一个代码平均报告,Sonarqube将使用该报告查看覆盖率。先决条件Maven构建工具的OpenJDK IDE(Intelljidea或STS) Sonarqube社区版...
第16章:有别于一般书籍的单元测试内容,本书以当前最具实战的JUnit4+Unitils+ Mockito复合测试框架对如何测试数据库、Web的应用进行了深入的讲解。 第17章:以一个实际的项目为蓝本,带领读者从项目需求分析、...
Spring Boot REST API TDD 演示REST API的Spring Boot应用程序是测试优先开发的。 使用1个域模型 ... 具有单独测试和集成测试源集的Gradle构建系统 ./gradlew test以运行单元测试 ./gradlew integration
16.7.1 对LoginController进行单元测试 16.7.2 使用Spring Servlet API模拟对象 16.7.3 使用Spring RestTemplate测试 16.7.4 使用Selenium测试 16.8 小结 第17章 实战案例开发 17.1 论坛案例概述 17.1.1 论坛整体...
Travis-CI状态: 先决条件 IDE插件,如果要在IDE中...Spring Test + RestAssured进行集成测试 使用类别将慢速测试和快速测试分开 假设条件 transaction.amount> = 0 重新考虑之后,负金额的交易就变得很有意义。 交易
16.7.1 对LoginController进行单元测试 16.7.2 使用Spring Servlet API模拟对象 16.7.3 使用Spring RestTemplate测试 16.7.4 使用Selenium测试 16.8 小结 第17章 实战案例开发 17.1 论坛案例概述 17.1.1 论坛整体...
Spring测试入门 ... Spring Test和Spring Boot Test:对Spring Boot应用程序的实用程序和集成测试支持。 AssertJ :流畅的断言库。 Hamcrest :匹配对象库(也称为约束或谓词)。 Mockito :一个
使用在springboot项目中使用powermock-mockito进行单元测试,演示mock static、private、whenNew、exception的测试。 注意 示例使用spring-boot 2.0.3.RELEASE 它间接引用 junit-4.12 mockito-core-2.15.0 但是官网...
使用JUnit和Mockito进行单元和集成测试 使用EhCache缓存 与TravisCI的持续集成 如何运行应用程序 确保已安装Maven,并将其添加到操作系统的PATH和Git中。 git clone: :michelspirlandeli / ponto-intelligent-api...
在线阅读 : (上面的地址访问速度缓慢的建议使用这个路径访问) 重要知识点 基础 异常处理 :、 JPA : 、 拦截器和过滤器 : 、SpringBoot 实现...使用 PowerMockRunner 和 Mockito 编写单元测试用例 5分钟搞懂如何在Sp
使用JUnit和Mockito进行单元和集成测试 使用EhCache缓存 与TravisCI的持续集成 如何运行应用程序 确保已安装Maven,并将其添加到操作系统的PATH和Git中。 git clone ...
TDD / XP / Scrum 使用单元 / 集成测试 Mockito / JUnit4 / MockMvc / dbunit + Stub + ContextConfiguration(DI 测试也可用) 计划:将添加 Spring Batch/Task js 项目 (Node.js) Backbone.js / jQuery / 下划线 ...
我还尝试编写三种不同类型的测试-单元测试,集成测试,端到端测试。核心项目是用Spring编写的,出于测试目的,我正在使用JUnit和Mockito,但是我将添加PostgreSQL数据库用于以后的测试。 单元测试 FirefighterTest-...