将之前学习junit时记录的一些文档整理下。
1、 junit是以jar文件的形式发布的,其中包括了所有必须的类,安装junit,你所需要做的一切工作就是把jar文件放到你的编译器能够找到的地方。(也可使用maven 工具)
2、 如果你并不是在使用IDE,而是从命令行直接调用JDK,那么你必须让你的classpath包含junit的jar包所在的路径。
3、 断言
AssertEquals(expected,actual,tolerance)
比较float型,tolerance:精确到哪位
assertEquals(3.33,10.0/3,0.01);----》精确到小数点2位
assertSame(expected,actual)-à同一个对象
assertNotSame(expected,actual)-à不是同一个对象
fail([string message]):message是可选参数,这种断言通常被用于标记某个不应该被到达的分支
4、异常:
也许和你想象的正好相反,异常在这里是彻头彻尾的好东西,它们能够告诉我们什么东西出错了,有时,在一个测试中,我们需要被测试方法抛出一个异常。例如,有一个名为sortMyList()的方法,如果传入参数是一个null list,那么我们将希望该方法抛出一个异常,在这种情况下,我们就需要显示地测试这一点。
public void testForException(){ try{ sortMyList(null); fail("should have thrown an exception"); }catch(RunntimeException e){ assertTrue(ture); } }
|
5、Mock:easymock,需加easymock和easymockclassextension.jar
6、FAQ
(1)、java.lang.NoClassDefFoundError: net/sf/cglib/proxy/Enhancer
需添加:cglib-nodep-2.1_3.jar
(2)、easymock:http://wenku.baidu.com/view/938fc308581b6bd97f19ea62.html
7、代码覆盖率:1、 安装clover:http://update.atlassian.com/eclipse/clover/
2、 选择你的项目后,右键,Clover->Enable This Project.
3、 Clover->Configure,选择Source为开发代码和测试代码,Test为测试代码
4、 选中你的测试代码,run as Junit TestCase
5、 之后就会有详细的覆盖情况的报告出来,真的是很详尽的~
6、 如果测试代码和开发的测试代码放在不同的project中的,在步骤3中设置Source和Test后可能有问题,可能统计出来的就是测试代码覆盖测试代码的情况了,所以我是在本地把测试写的测试代码也放到开发的单元测试代码的包下的,这样就可以用测试代码来覆盖开发代码了。当然可能是我自己没弄好导致的这个情况,大家根据自己情况来吧。
https://my.atlassian.com/login下载license新版:
二、
单元测试测试哪些内容:
结果是否正确
是否所有的边界条件都是正确的
能查一下反向关联吗
能用其他手段交叉检查一下结果吗
你是否可以强制错误条件发生
是否满足性能要求
Junit4
用@Test注释修饰测试方法不需要继承TestCase
异常测试:@Test(expected=)
@Test(expected=ArithmeticException.class)
public void test(){
MyException a=new MyException();
a.divided(1, 0);
}
超时测试:@Test(timeout=1)
Timeout值代表测试能够运行的最长时间,如果时间超过,测试就会失败。
忽略测试:@Ignore
Unit 4使用注释来减少固件花费的成本,允许为每个测试运行一次固件,或为整个类运行一次固件,或一次也不运行。有四种固件注释:针对类层次的固件有两种,针对方法层次的固件有两种。在类层次,有 @BeforeClass
和 @AfterClass
,在方法(或测试)层次,有 @Before
和 @After
。
参数测试
在JUnit 4中创建参数测试只需要五个步骤:
- 创建一个不含参数的通用测试。
- 创建一个返回 Collection 类型的 static feeder方法,并用 @Parameter 注释加以修饰。
- 为在步骤1中定义的通用方法所要求的参数类型创建类成员。
- 创建一个持有这些参数类型的构造函数,并把这些参数类型和步骤3中定义的类成员相应地联系起来。
- 通过 @RunWith 注释,指定测试用例和 Parameterized 类一起运行。
//指定测试用例和Parameterized类一起运行。
@RunWith(Parameterized.class)
publicclassMyExceptionTest {
//成员变量
privateinta;
privateintb;
//构造函数
publicMyExceptionTest(inta,intb){
this.a=a;
this.b=b;
}
//参数
@Parameters
publicstaticCollectionregExValues() {
returnArrays.asList(newObject[][] { { 4, 2 },
{ 6, 3 }, { 12, 6 },
{ 8, 4 } });
}
//测试case
@Test
publicvoidtest1(){
MyException ww=newMyException();
assertEquals(Integer.valueOf(2),Integer.valueOf(ww.divided(a,b)));
}
}