java程序员如何编写更好的单元测试?
原创

java程序员如何编写更好的单元测试?

好文
试试语音读文章

热门回答:

一般来说。Java程序员要编写更好的单元测试。可以从以下7个方面改善:

1、首先需要全面了解软件开发测试的类型。单元测试用于测试各个代码组件。并确保代码按照预期的方式工作。

2、使用框架来用于单元测试。Java提供了若干用于单元测试的框架。TestNG和JUnit是最流行的测试框架

3、谨慎使用测试驱动开发。测试驱动开发(TDD)是一个软件开发过程。在这过程中。在开始任何编码之前。我们基于需求来编写测试。由于还没有编码。测试最初会失败。然后写入最小量的代码以通过测试。然后重构代码。直到被优化。

4、测量代码覆盖率。代码覆盖率衡量(以百分比表示)了在运行单元测试时执行的代码量。通常。高覆盖率的代码包含未检测到的错误的几率要低。因为其更多的源代码在测试过程中被执行。

5、尽可能将测试数据外部化。在JUnit4之前。测试用例要运行的数据必须硬编码到测试用例中。这导致了限制。为了使用不同的数据运行测试。测试用例代码必须修改。

6、善用JUnit。与TestNG类似。测试数据也可以外部化用于JUnit。

7、使用断言而不是Print语句。许多新手开发人员习惯于在每行代码之后编写System.out.println语句来验证代码是否正确执行。这种做法常常扩展到单元测试。从而导致测试代码变得杂乱。除了混乱。这需要开发人员手动干预去验证控制台上打印的输出。以检查测试是否成功运行。更好的方法是使用自动指示测试结果的断言。

其他观点:

近段时间。公司预备推动单元测试以提高转测代码的质量。借鉴学习一些测试大佬的经验自己试了一把。小测我在此写下初写单元测试的心得。希望能和大家交流交流单元测试技术!

一、概述

1、 单元测试(模块测试)是开发者编写的一小段代码。用于检验被测代码的一个很小的、很明确的功能是否正确。

2、一般认为。在结构化程序时代。单元测试所说的单元是指函数。在当今的面向对象时代。单元测试所说的单元是指类。以我的实践来看。以类作为测试单位。复杂度高。可操作性较差。因此仍然主张以函数作为单元测试的测试单位

3、有一种看法是。只测试类的接口(公有函数)。不测试其他函数。从面向对象角度来看。确实有其道理。但是。测试的目的是找错并最终排错。因此。只要是包含错误的可能性较大的函数都要测试。跟函数是否私有没有关系

二、单元测试设计思想

1、单元测试可以借鉴类似功能测试的思想来进行设计

2、一个待测试类当作一个功能块。待测试类当中的方法当作一个小的功能点。

单元测试就理解为对这个待测试方法进行场景设计。编写代码。查看执行各场景结果和场景覆盖率

3、单元测试场景设计可以采用因果分析的方法。将各个参数的组合当作各条件组合。将输入参数后执行方法的结果当作是各条件组合后的结果

三、单元测试设计(采用因果分析法)

1、确定待测试模块即建立测试类

Game类及对应的Game测试类

package test.testDemo;public class Game { public String winGame(int num1,int num2) { int num=num1-num2; String txt=null; if(num>0) { txt=\"夺奖成功!\"; }else if(num==0) { txt=\"安慰奖!\"; }else { txt=\"夺奖失败!\"; } return txt; } }package test.testDemo;import static org.junit.Assert.*;import org.junit.Test;public class GameTest { @Test public void testWinGame() { fail(\"Not yet implemented\"); } }

2、分析因果条件列出场景并进行用例设计

3、单元测试用例编写

3.1 参数化

3.1.1 引入待测试类。定义参数

3.1.2 引入注解@RunWith(Parameterized.class)参数化测试类

3.1.3 编写需用到的参数的构造函数

3.1.4 编写参数数据初始化方法

package test.testDemo;import java.util.Arrays;import java.util.Collection;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.Parameterized;import org.junit.runners.Parameterized.Parameters;//引入注解@RunWith(Parameterized.class)参数化测试类@RunWith(Parameterized.class)public class GameTest { //引入待测试类。定义参数 private Game game=new Game(); private int num1; private int num2; private String expected; //编写需用到的参数的构造函数 public GameTest(int num1, int num2,String expected) { super(); this.num1 = num1; this.num2 = num2; this.expected=expected; } //编写参数数据初始化方法 @Parameters public static Collection<Object[]> data(){ return Arrays.asList(new Object[][] {{2,1,\"夺奖成功!\"},{2,2,\"安慰奖!\"},{1,2,\"夺奖失败!\"}}); } @Test public void testWinGame() { } }

3.2 编写单元测试方法

四、执行单元测试用例。检查覆盖率。覆盖率需eclipse中安装EclEmma插件

1、选中测试类》右键选中Coverage As》Junit Test

2、执行结果如下

您还感兴趣的文章推荐

以上就是由互联网推广工程师 网创网 整理编辑的,如果觉得有帮助欢迎收藏转发~

分享到 :
相关推荐

发表评论

您的电子邮箱地址不会被公开。

评论(2)

  • 明天的阳光美吗 永久VIP 2022年12月28日 01:04:53

    测试,单元测试,代码,参数,函数,覆盖率,方法,组合,场景,因果

  • 听闻你 永久VIP 2022年12月28日 01:04:53

    没想到大家都对java程序员如何编写更好的单元测试?感兴趣,不过这这篇解答确实也是太好了

  • 孤飘的蒲公英 永久VIP 2022年12月28日 01:04:53

    一般来说。Java程序员要编写更好的单元测试。可以从以下7个方面改善:1、首先需要全面了解软件开发测试的类型。单元测试