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除报错之后,语句绕过断言,进入到catch语句中,打印异常之后,该单元测试执行完毕。压根就没走断言!!!
JUnit4支持(出现异常,则测试失败).因此无须在添加try catch语句,亦或在catch语句块中添加断言;而如果想测试异常,可以使用参数来执行即可。
以上问题已经添加了自己的一些想法。
出现以上问题,足以反映出开发团队的一些问题:
1、开发成员对JUnit方面知识涉猎太少;
2、开发成员看出问题,而没有反映,则说明了开发团队热情度不高;
3、反映过该问题,但其他成员依然如此,说明了团队沟通不足或者不是一个学习型团队;没有提供一定的交流、学习时间。
4、项目领导只关心功能是否正常,其他一切不管。唉,无话可说了。
写在此,希望自己遇到以上问题的时候,能积极解决,而不是消极面对。