JUnit最佳实践

来源:互联网 发布:推荐几款好用的软件 编辑:程序博客网 时间:2024/05/21 05:59

完整版见https://jadyer.github.io/2010/11/17/junit-demo/



目录【可点击浏览】
1..JUnit4.x与JUnit3.8的明显不同
2..资源初始化
3..用于批量运行的测试套件
4..JUnit中关于测试失败的两种情况
5..测试类的存放
6..测试类的命名
7..测试方法的细节
8..测试代码的细节

 


 

JUnit4.x与JUnit3.8的明显不同

JUnit4.x JUnit3.8 extends  TestCase@Before void  setUp() @After void  tearDown()@Test void  testXxx()@BeforeClass @AfterClass @SuiteClasses static  Test  suite()

 

资源初始化
待测试对象及辅助对象在@Before 中初始化,全局资源可以在@BeforeClass中初始化
全局资源通常启动缓慢,如数据库、Web服务器 ,使之仅初始化一次,可加快测试速度


用于批量运行的测试套件
在一个大的项目中,会针对不同包中的源文件提供不同的位于不同包中的测试类
这时最好在每个包中都提供一个批量执行该包中所有测试类的Suite测试套件类
最后再提供一个包含了每个包中的Suite测试套件类的总的测试套件类
但要保证测试套件之间没有循环包含关系 ,否则就会出现无尽的循环


JUnit将测试失败分为两种情况:Failure和Error
Failure 一般由单元测试使用的断言方法判断失败引起的,它表示在测试点发现了问题
Error 则是由代码异常引起的,这是测试目的之外的发现
Error 可能产生于测试代码本身的错误,也可能是被测试代码中的一个隐藏的BUG


测试类的存放
单元测试是给开发人员使用的。而开发人员使用测试,是为了保证代码的质量
最终的客户不需要单元测试,交付产品时,不需要把测试的代码提交给客户
因此不能把测试类放到源代码的包里面,可以在项目中New 一个Source Folder
然后在New 一个Package,然后我们让Package的名字和src的包名一致
就是说将源代码跟测试代码放在不同的目录下,但它们的包是相同的
好处是,它们编译好的class都在相同目录下,所以无需引用即可访问src的类


测试类的命名
假设源代码的类名是Calculator ,那么测试代码的类名就叫做CalculatorTest
见名知意,让人一看就知道CalculatorTest.java是用来测试Calculator.java的


测试方法的细节
JUnit用到了反射,它会执行测试类中以test开头的方法,故方法名要以test开头
test后可以跟任何名字,假设测试add()方法 ,为了见名知意,测试方法为testAdd()
应当为需要测试的方法编写多个测试方法,每个测试方法各有侧重
并且测试方法要覆盖所有可能抛出异常的情况


测试代码的细节
测试代码必须简单到能直接看清测试逻辑,即决不能对测试代码再进行测试
不能为适应测试而修改源代码 ,即决不能维护两份源代码
应当一份用于产品,一份用于测试
注意 :不要与“编写测试能改进代码”相混淆

原创粉丝点击