Java中编写单元测试,复杂一些的技术包括Stub和Mock。如今的Mock技术真的是越来越成熟了,甚至在Mock的概念上衍生出了Virtual Mock的概念。目前很多Java项目编写单元测试都会涉及部分Virtual Mock的技术。
DJunit是基于JUnit开发的开源的测试框架,可以集成到Eclipse,支持很多Mock方法,支持测试覆盖率查看等等。详细的可以看http://en.wikipedia.org/wiki/DjUnit
下面的列表显示了DJunit对于Mock的支持。
Method Name | Contents |
addReturnValue | 为指定类的指定方法添加指定的返回值 |
setReturnValueAt | 为指定类的指定方法在指定调用次数中设定指定的返回值 |
setReturnValueAtAllTimes | 为指定类的指定方法在所有调用次数中设定指定的返回值 |
addReturnNull | 为指定类的指定方法添加Null的返回值 |
setReturnNullAt | 为指定类的指定方法在指定调用次数中添加Null的返回值 |
setReturnNullAtAllTimes | 为指定类的指定方法在所有调用次数中添加Null的返回值 |
getArgument | 取得指定类的指定方法所传入的参数 |
getCallCount | 取得指定类的指定方法的调用次数 |
assertArgumentPassed | 断言指定类的指定方法是否传入了指定的参数 |
assertCalled | 断言指定类的指定方法是否被调用 |
assertNotCalled | 断言指定类的指定方法是否没被调用 |
一个最简单的例子:
import
jp.co.dgic.testing.framework.DJUnitTestCase;
publicclass
HelloWorldTest
extends
DJUnitTestCase{
//omit
publicvoid
test001(){
System.out.println(
"[test001]"
);
HelloWorld.main(
null
);
}
publicvoid
test002(){
addReturnValue(
"HelloWorld"
,
"sayHello"
,
"GoodmorningWorld."
);
System.out.println(
"[test002]"
);
HelloWorld.main(
null
);
}
publicvoid
test003(){
addReturnValue(
"HelloWorld"
,
"sayHello"
,
"bye."
);
System.out.println(
"[test003]"
);
HelloWorld.main(
null
);
}
}