5
回答
请教下java单元测试的编码习惯:对于一个待测试方法,写单元测试的时候是把所有测试用例集中在一个测试方法中,还是为每个测试用例写独立的测试方法好?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

RT

最经系统学习了下java中的单元测试,想尝试在项目中慢慢实践。

在实践过程中碰到一些疑惑。

对于一个待测试的方法method,应该如何组织测试用例呢?

我想到了两种

一是写一个对应的测试方法,将所有的测试用例集中在里面

比如

@Test  
public void testmethod(){

//测试用例1
//测试用例2
//测试用例3

}



另一种是为每个测试用例写一个测试方法,如:
@Test  
public void testmethod1(){
//测试用例1

}
@Test  
public void testmethod2(){
//测试用例2

}
@Test  
public void testmethod3(){
//测试用例3

}



我想请问一下,大家在实际项目中,哪种方案更好呢?


PS:单元测试看起来很简单,写起来真心很困难,看书上说一般要求程序代码跟测试代码达到1:1,在实际操作后发现,要达到高的测试覆盖率,这个测试代码量真心不够

举报
Tek_Eternal
发帖于4年前 5回/1K+阅
共有5个答案 最后回答: 4年前

当然是使用第二种.

1. 把很多测试用例都写到一个方法里边这样的测试恐怕是非常难写的吧.

2. 每一个测试用例都有一些基础数据信赖,所以会有setUp/tearDown,放到一个方法里边后,第一个测试用例跑过了,跑第二个的时候基础数据就已经变了.

3. 当跑单元测试的时候,一个testMethod会计一次数,产生一个进度,跑完后你会知道自己跑了多少个测试,测试了多少种情况.

4. 测试覆盖率刚开始的时候应该100%,随着测试越写越多,对自己的程序也就越来越有信心,到后来测试覆盖率就不是重点了,甚至很多地方测试也就不需要写了,因为那时间很你有信心那一段代码不会出错.

--- 共有 6 条评论 ---
Tek_Eternal回复 @何广宇 : 非常感谢! 4年前 回复
何广宇回复 @Tek_Eternal : see https://github.com/TNG/junit-dataprovider 另: 我是做PHP的,用的是PHPUnit.所以要具体到代码实现上可能有差别.但xUnit在设计上应该都是一致的. 4年前 回复
Hazelnut覆盖100%完全是浪费时间。 4年前 回复
Tek_Eternal回复 @何广宇 : dataprovider 是? 我最近看junit相关的单元测试材料没发现这个词呢- - 4年前 回复
何广宇回复 @Tek_Eternal : 如果你没办法给一个测试用例命名的话,那你是在测试什么东西呢?这个在测试前肯定要理清楚的.如果是同一个功能,只是提供的数据不同的话,可以考虑dataprovider,而不是写多个测试用例. 4年前 回复
第一种都觉得复杂了,因为项目不会给你闲着蛋疼的一个一个玩测试的。。
--- 共有 2 条评论 ---
fred1218回复 @Tek_Eternal : 这话就不对了,如果真有大牛写的代码,人家认为完全没必要写单元测试,人家就不写 4年前 回复
Tek_Eternal这个。。。国内的公司真的很少写单元测试的吗- - 4年前 回复

首先写单元测试是件既有益于自己又有益于他人的事情。

单元测试的好处:

1.可以保证代码的质量,提升项目组对提交物的信心,前提是单元测试都是自己用心写的,不是那些为了写而写的单元测试。拿我现在手头维护的一个项目来说,由于这个项目在开发时写了大量的单元测试,所以我在修改完代码后,跑一下这些单元测试,绝大多数情况下可以发现代码中的问题,如果问题没有被发现,我会添加新的单元测试。

2.好的单元测试兼有Sample Code的作用,别人接手你的代码之后,看下单元测试,就可以大致了解你的代码。

3.写单元测试的过程也是考验代码结构是否良好的过程,设计良好的代码易于为之编写单元测试。

写单元测试也不要走火入魔,不要过于追求所谓的覆盖率,如果连get、set也测,那真是闲得蛋疼了。

其次,不要拘泥于形式,像你说的第一种、第二种都可以用,具体由你所测试的业务场景来决定。

最后,单元测试运行起来要快,对外部的依赖尽可能少。


--- 共有 3 条评论 ---
Tek_Eternal回复 @PSP2 : 好的:) 4年前 回复
Hazelnut回复 @Tek_Eternal : 一些开源类库里可能有,比如dom4j, apache dbutils等 4年前 回复
Tek_Eternal谢谢~ 请问网上哪里有带测试代码的项目参考吗? 公司没写单元测试的习惯,想要学习实际项目的编写风格却没地方参考。 4年前 回复
单元测试仅是对自己代码做的一个检查,检测不同的情景下是否能得到你想要的结果,你想怎么在你的test method中怎么写都行,这个代码又不需要跟项目一起打包提交。对一些你认为需要做测试的service做单元测试即可
个人比较倾向于第二种,比较清晰,不容易混淆,找什么情况下没通过也方便,命名的话我是:test+测试方法名+测试的条件
--- 共有 3 条评论 ---
gavinfish回复 @Tek_Eternal : 测试方法名可以适当缩写一下能看懂就好,测试条件是写清楚比较好,之间加个分隔符 4年前 回复
Tek_Eternal谢谢~,没想到提问这么久了还有人回复。 这样方法名是不是会非常的长呀- -,这是我纠结的地方- - 4年前 回复
咯咯鸡我还习惯下划线连接,测试条件用中文 4年前 回复
顶部