有时候,有些编写不良好的类的构造函数,初始代码块,静态代码块存在大量的初始化逻辑,初始化会报错。
比如,有些类初始化的时候就去连结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
);
}
}
|