from Jmockit 中文网 http://jmockit.cn/showArticle.htm?channel=4&id=14

有些编写不良好的类的构造函数,初始代码块,静态代码块存在大量的初始化逻辑,初始化会报错。

比如,有些类初始化的时候就去连结DB,连不上就报错。这很影响我们的测试程序的运行。

此时,我们需要把这些初始化逻辑Mock掉。用我们的Mock逻辑替代。要Mock这些初始化代码,很简单。见如下的例子:

  1. //一个包含初始代码块的普通类
  2. public class AnOrdinaryClassWithBlock {
  3. private int i;
  4.  
  5. public static int j;
  6.  
  7. // 初始代码块
  8. {
  9. i = 1;
  10. }
  11. // 静态初始代码块
  12. static {
  13. j = 2;
  14. }
  15.  
  16. // 构造函数
  17. public AnOrdinaryClassWithBlock(int i) {
  18. this.i = i;
  19. }
  20.  
  21. public int getI() {
  22. return i;
  23. }
  24.  
  25. public void setI(int i) {
  26. this.i = i;
  27. }
  28.  
  29. }
  1. //Mock构造函数&初始代码块
  2. public class ConstructorAndBlockMockingTest {
  3. // AnOrdinaryClassWithBlock的MockUp类,继承MockUp即可
  4. public static class AnOrdinaryClassWithBlockMockUp extends MockUp<AnOrdinaryClassWithBlock> {
  5. // Mock构造函数和初始代码块, 函数名$init就代表类的构造函数
  6. @Mock
  7. public void $init(int i) {
  8. }
  9.  
  10. // Mock静态初始代码块,, 函数名$init就代表类的静态代码块
  11. @Mock
  12. public void $clinit() {
  13. }
  14. }
  15.  
  16. @Test
  17. public void testClassMockingByMockUp() {
  18. new AnOrdinaryClassWithBlockMockUp();
  19. AnOrdinaryClassWithBlock instance = new AnOrdinaryClassWithBlock(10);
  20. // 静态初始代码块被mock了
  21. Assert.assertTrue(AnOrdinaryClassWithBlock.j == 0);
  22. // 构造函数和初始代码块被mock
  23. Assert.assertTrue(instance.getI() == 0);
  24. }
  25.  
  26. }

Jmockit 构造函数与初始代码块的更多相关文章

  1. Java 类的实例变量初始化的过程 静态块、非静态块、构造函数的加载顺序

    先看一道Java面试题: public class Baset { private String baseName = "base"; // 构造方法 public Baset() ...

  2. JMockit

    [TOC] 简介 JMockit是基于JavaSE5中的java.lang.instrument包开发,内部使用ASM库来动态修改java的字节码,使得java这种静态语言可以想动态脚本语言一样动态设 ...

  3. jmockit学习

    下图为jmockit 类图.在我们编写代码时几乎都会用到Expectations(期望)和Verifications(校验),二者均继承自Invacations. 常会用到的注解有:@Mocked @ ...

  4. jmockit学习总结

    mock类型和实例 从依赖的测试代码调用的方法和构造函数是mock(模拟)的目标. Mocking提供了我们需要的机制,以便将被测试的代码与(一些)依赖关系隔离开来.我们通过声明适当的模拟字段和/或模 ...

  5. Jmockit之mock特性详解

    本文是Jmockit学习过程中,根据官网所列的工具特性进行解读. 1.调用次数约束(Invocation count constraints) 可以通过调用计数约束来指定预期和/或允许匹配给定期望的调 ...

  6. 单元测试系列:Mock工具Jmockit使用介绍

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6760272.html Mock工具Jm ...

  7. 单元测试系列之十一:Jmockit之mock特性详解

    本文是Jmockit学习过程中,根据官网所列的工具特性进行解读. 1.调用次数约束(Invocation count constraints) 可以通过调用计数约束来指定预期和/或允许匹配给定期望的调 ...

  8. 单元测试系列之二:Mock工具Jmockit实战

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6760272.html Mock工具Jm ...

  9. 单元测试mock框架——jmockit实战

    JMockit是google code上面的一个java单元测试mock项目,她很方便地让你对单元测试中的final类,静态方法,构造方法进行mock,功能强大.项目地址在:http://jmocki ...

随机推荐

  1. 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 7

    23.5  创建RESTful规范 WebAPI框架 虽然我们现在可以自己实现API了,也了解了RESTful API的设计原则,但让自己实现的API符合RESTful API规范,对很多刚接触API ...

  2. GNSS频率分配表

    说明: 公开资料表示,GPS L3用于核爆炸等高能红外辐射事件的侦查,L4用于电离层研究. GLONASS FDMA信号G1.G2.G3三个频段各自频点见以下附表,摘自ITU的频率协调结果. GLON ...

  3. laravel中视图的基本使用(七)

    laravel中的视图默认保存在 resources\views 目录下.在控制器中,我们通常使用 view() 方法返回一个视图文件. <?php namespace App\Http\Con ...

  4. Linux网络——配置网络之iproute家族命令

    Linux网络——配置网络之iproute家族命令 摘要:本文主要学习了iproute家族用来配置网络的命令. ip命令 ip命令用于查看和管理IP地址.接口.路由.隧道等.用来取代ifconfig命 ...

  5. JavaWeb之Fliter & Listener

    Fliter & Listener Listener 监听器 作用 监听某一事件的发生.状态的改变. 监听器内部实现机制 接口回调 接口回调 A在执行循环,当循环到5的时候, 通知B. 事先先 ...

  6. sharepointOnline的外接应用创建

    #CODE STARTS HERE $programFiles = [environment]::getfolderpath("programfiles") add-type -P ...

  7. Xcode 11新建工程.--iOS 13 SceneDelegate适配

    收录文章::::::::::::::: iOS 13 适配要点总结 在Xcode 11 创建的工程,运行设备选择 iOS 13.0 以下的设备,运行应用时会出现黑屏现象.原因: Xcode 11 默认 ...

  8. iOS----------苹果警告

    Dear Developer, We identified one or more issues with a recent delivery for your app, "私募排排网-连接 ...

  9. 7-SQL-join连接

    (1) 内连接 关键字:inner join on select * from a_table inner join b_table on a_table.a_id = b_table.b_id; / ...

  10. nginx是怎么处理http请求的

    nginx是怎么处理http请求的 参考:How nginx processes a request nginx first decides which server should process t ...