码迷,mamicode.com
首页 > 其他好文 > 详细

jmockit 中文网 构造函数中文代码块

时间:2019-12-09 18:38:32      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:测试   替代   public   class   smo   com   vat   ace   良好的   

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//一个包含初始代码块的普通类 
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;
    }
 
}

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//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 中文网 构造函数中文代码块

标签:测试   替代   public   class   smo   com   vat   ace   良好的   

原文地址:https://www.cnblogs.com/funkboy/p/12012563.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!