jmockit 中文网 构造函数中文代码块
Posted funkboy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 ); } }
|
以上是关于jmockit 中文网 构造函数中文代码块的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向ART 脱壳 ( InMemoryDexClassLoader 脱壳 | BaseDexClassLoader 构造函数 | DexPathList 构造函数及后续调用 )(代码片
在派生构造函数中的某些代码块之后调用派生类中的基类构造函数[重复]