首页 > 其他 > 详细

Jmockit 构造函数与初始代码块

时间:2019-12-18 12:05:24      阅读:64      评论:0      收藏:0      [点我收藏+]

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

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

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

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

技术分享图片
//一个包含初始代码块的普通类 
public class AnOrdinaryClassWithBlock {
    private int i;
 
    public static int j;
 
    // 初始代码块
    {
        i = 1;
    }
    // 静态初始代码块
    static {
        j = 2;
    }
 
    // 构造函数
    public AnOrdinaryClassWithBlock(int i) {
        this.i = i;
    }
  
    public int getI() {
        return i;
    }
 
    public void setI(int i) {
        this.i = i;
    }
 
}
技术分享图片
技术分享图片
//Mock构造函数&初始代码块
public class ConstructorAndBlockMockingTest {
    // AnOrdinaryClassWithBlock的MockUp类,继承MockUp即可
    public static class AnOrdinaryClassWithBlockMockUp extends MockUp<AnOrdinaryClassWithBlock> {
        // Mock构造函数和初始代码块, 函数名$init就代表类的构造函数
        @Mock
        public void $init(int i) {
        }
 
        // Mock静态初始代码块,, 函数名$init就代表类的静态代码块
        @Mock
        public void $clinit() {
        }
    }
 
    @Test
    public void testClassMockingByMockUp() {
        new AnOrdinaryClassWithBlockMockUp();
        AnOrdinaryClassWithBlock instance = new AnOrdinaryClassWithBlock(10);
        // 静态初始代码块被mock了
        Assert.assertTrue(AnOrdinaryClassWithBlock.j == 0);
        // 构造函数和初始代码块被mock
        Assert.assertTrue(instance.getI() == 0);
    }
 
}
技术分享图片

Jmockit 构造函数与初始代码块

原文:https://www.cnblogs.com/wiggins/p/12058669.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!