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

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

比如,有些类初始化的时候就去连结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 );
     }
 
}

 

猜你喜欢

转载自www.cnblogs.com/funkboy/p/12012563.html