javaunittest怎么写( 二 )


System.out.println("=====static init=======");
}
@AfterClass
public static void tearDownAfterClass(){
System.out.println("=====static destory=======");
}
@Before
public void setUp(){
System.out.println("[email protected]=======");
c=new Calutor();
}
@After
public void tearDown(){
System.out.println("[email protected]=======");
}
@Test
public void testAdd(){
int sum=c.add(1, 2);
Assert.assertEquals(3, sum);
}
@Test(expected=com.sc.zy.MyException.class)
public void testDiv(){
c.div(1, 0);
}
@Ignore
public void testDiv1(){
int d=c.div(1, 5);
Assert.assertEquals(0, d);
}
}
5.Java开发如何编写出优秀的Java单元测试1. 使用框架来用于单元测试
Java提供了若干用于单元测试的框架 。TestNG和JUnit是最流行的测试框架 。JUnit和TestNG的一些重要功能:
易于设置和运行 。
支持注释
允许忽略或分组并一起执行某些测试 。
支持参数化测试,即通过在运行时指定不同的值来运行单元测试 。
通过与构建工具,如Ant,Maven和Gradle集成来支持自动化的测试执行 。
EasyMock是一个模拟框架,是单元测试框架,如JUnit和TestNG的补充 。EasyMock本身不是一个完整的框架 。它只是添加了创建模拟对象以便于测试的能力 。例如,我们想要测试的一个方法可以调用从数据库获取数据的DAO类 。在这种情况下,EasyMock可用于创建返回硬编码数据的MockDAO 。这使我们能够轻松地测试我们意向的方法,而不必担心数据库访问 。
2. 谨慎使用测试驱动开发!
测试驱动开发(TDD)是一个软件开发过程,在这过程中,在开始任何编码之前,我们基于需求来编写测试 。由于还没有编码,测试最初会失败 。然后写入最小量的代码以通过测试 。然后重构代码,直到被优化 。
目标是编写覆盖所有需求的测试,而不是一开始就写代码,却可能甚至都不能满足需求 。TDD是伟大的,因为它导致简单的模块化代码,且易于维护 。总体开发速度加快,容易发现缺陷 。此外,单元测试被创建作为TDD方法的副产品 。
然而,TDD可能不适合所有的情况 。在设计复杂的项目中,专注于最简单的设计以便于通过测试用例,而不提前思考可能会导致巨大的代码更改 。此外,TDD方法难以用于与遗留系统,GUI应用程序或与数据库一起工作的应用程序交互的系统 。另外,测试需要随着代码的改变而更新 。
因此,在决定采用TDD方法之前,应考虑上述因素,并应根据项目的性质采取措施 。
3. 测量代码覆盖率
代码覆盖率衡量(以百分比表示)了在运行单元测试时执行的代码量 。通常,高覆盖率的代码包含未检测到的错误的几率要低,因为其更多的源代码在测试过程中被执行 。测量代码覆盖率的一些最佳做法包括:
使用代码覆盖工具,如Clover,Corbetura,JaCoCo或Sonar 。使用工具可以提高测试质量,因为这些工具可以指出未经测试的代码区域,让你能够开发开发额外的测试来覆盖这些领域 。
每当写入新功能时,立即写新的测试覆盖 。
确保有测试用例覆盖代码的所有分支,即if / else语句 。
高代码覆盖不能保证测试是完美的,所以要小心!
4. 尽可能将测试数据外部化
在JUnit4之前,测试用例要运行的数据必须硬编码到测试用例中 。这导致了限制,为了使用不同的数据运行测试,测试用例代码必须修改 。但是,JUnit4以及TestNG支持外部化测试数据,以便可以针对不同的数据集运行测试用例,而无需更改源代码 。
5. 使用断言而不是Print语句