1、持续集成时,某个单元测试失败,找不到作者。
项目成员持续流动,加之测试用例随着项目的开发而不断增加,查找代码的作者,也算是个力气活了,如何能快速而准确的定位到代码开发者呢?Java提供的 @author 可以达到该要求;
开发增加和修改的单元测试,必须要将开发者注释,便于快速定位。
2、单元测试方法只能执行一次。
一位同事写的代码,调用删除方法,传入主键ID,将该记录删除;结果再次执行的时候报错,对象不存在;原来是JUnit单元测试框架搭建有问题,没有设置默认回滚.仅需添加以下注解即可:
@TransactionConfiguration(transactionManager="transactionManager",defaultRollback=true)
@Transactional
当然了
,
也可以在方法级别指定
(一般不推荐):
@Rollback(true)
3、单元测试方法没有断言。
@Test
public void testFindPeople(){
PeopleQuery pQuery = new PeopleQuery();
pQuery.setName("zhangsan");
pQuery.setLevel(4);
peopleDao.findPeople(pQuery);
}
代码如上,不知道这样的单元测试目的何为,完全没有业务上的判断逻辑。
因此提出,JUnit测试方法必须有断言(某些极端情况排除,比如测试超时时间、异常等),以满足业务上和逻辑上的要求。
4、方法执行出错,但是JUnit显式测试成功(出现绿条)
@Test
public void testException(){
try {
int i = 10/0;
Assert.assertEquals(2,i);
} catch (Exception e) {
e.printStackTrace();
}
}
代码如上 ,被0除,大家肯定知道该句会报错,但是结果呢,JUnit却提示 ” 执行成功 ” 。为什么呢?
原来,被0除报错之后,语句绕过断言,进入到catch语句中,打印异常之后,该单元测试执行完毕。压根就没走断言!!!
JUnit4支持(出现异常,则测试失败).因此无须在添加try catch语句,亦或在catch语句块中添加断言;而如果想测试异常,可以使用参数来执行即可。
以上问题已经添加了自己的一些想法。
出现以上问题,足以反映出开发团队的一些问题:
1、开发成员对JUnit方面知识涉猎太少;
2、开发成员看出问题,而没有反映,则说明了开发团队热情度不高;
3、反映过该问题,但其他成员依然如此,说明了团队沟通不足或者不是一个学习型团队;没有提供一定的交流、学习时间。
4、项目领导只关心功能是否正常,其他一切不管。唉,无话可说了。
写在此,希望自己遇到以上问题的时候,能积极解决,而不是消极面对。