JUnit框架实现Java单元测试

2020-01-16 05:55柯采
电子技术与软件工程 2019年21期
关键词:单元测试程序员测试用例

文/柯采

单元测试是软件测试中一种最基本的测试,能够将每一个小的功能模块、函数代码进行高效率的测试,从而减少软件后期代码进行调试时出现大型BUG的出现率。单元测试能够保证代码的正确率,并且不会破坏这个功能模块本体,做到一种验证代码正确性而不关心代码具体实现细节,编写单元测试能够清楚的认识到代码逻辑,让程序员对自己的代码质量有新的认识以及提供需求变更时修改该模块的思路。在以前结构化编程方法中,普遍将每一个函数作为单元测试的主体,但自面向对象方法在软件开发中的地位在计算机领域不断深入,现在的单元测试主要将每一个类作为单元测试的主体,编写好测试用例之后可直接测试每一个类中的所有方法,达到简单高效的测试。单元测试是一种具有高效、验证性、设计性的测试,在目前Java开发中具有广泛的应用,且其中基于JUnit框架的Java单元测试最为成功。

1 JUnit框架

JUnit是一种强大的开源的面向Java单元测试的框架,使用JUnit在Java各个开发过程中不断进行单元测试将会大幅度提高程序质量,保证程序结果的正确运行。且JUnit可以帮助程序员进行自动测试,不需要编写main方法造成main中大量的类接口出现,使得测试混乱。在JUnit中当你测试的功能模块出现了错误,它都会提醒你是Failure或Error,这个好处是由于JUnit的断言功能判断你的代码运行实际结果与期望值是否正确,提高了测试效率。

1.1 JUnit TestCase类

当继承了TestCase类之后,就可以使用框架的单元测试功能。类里面的主要方法为setUp()和tearDown(),当开始在使用的过程中编程人员可以合理运用这两种方法,其中setUp()主要写测试前进行一些相关的配置以及变量的初始化操作,通常搭配注解@Before来使用,而tearDown()则主要写测试之后一些连接的关闭比如数据库连接以及必要的资源释放操作,避免造成资源浪费,通常搭配注解@After来使用,并且这些方法都是自动编写后自动进行调用。

1.2 JUnit Assert类

想要验证功能模块是否达到预期的目标,就需要在编写测试用例之后使用Assert类方法,其中包含了多种静态断言验证方法。主要方法为AssertEquals():其中两个参数分别为期望值和实际值,用来判断是否相等;AssertTrue():用来判断条件是否为真,参数类型为布尔型;AssertSame():参数类型为期望对象和实际对象,通过内存地址来判断是否相等。之所以继承TestCase类就能够写单元测试是因为TestCase类继承了Assert类拥有了用于验证的断言功能。当测试后报Failure时是因为断言失败,检查到与预期不符,报Error时是代码本身存在隐患,为代码逻辑问题。

1.3 JUnit测试代码规范

当每一个测试方法写好之后,必须搭配@Test注解来修饰让JUnit知道这是测试方法,并且作为测试方法的函数名也必须为publicvoid无参函数进行修饰,同时在写测试方法之前,需要为测试方法创建一个源代码目录,并且在这个目录下创建的包名必须与被测试类的包名相同。在测试方法中需要进行独立的测试,不能与其他方法有关联。用一个简单的测试类框架例子来说明,如下:

其中测试类名一般为XxxTest类,测试方法也尽量使用testxxx()来表明测试的是哪一个方法,这样看起来直观简洁,容易找到出现BUG的方法块。

2 JUnit测试实例

下面通过判断一个具有年份是否为闰年方法的类(Year)来编写测试用例和测试用例类(YearTest),用JUnit来进行简单的测试。

下面为被测试类代码:

下面为测试类的单元测试代码:

运行上面四个测试方法按照被测试方法的功能描述都会出现正确的验证,第一个测试方法主要是看设定的年份为2000年,是否与预期的相等;第二个方法判断2000年是否为闰年;第三个方法超出大于等于0的下限,使用负数来测试是否正确;第四个方法通过下界为0来测试边界值0是否位闰年,但只要JUnit出现某一个方法为Faliure就说明哪一个方法中出现了没有预料到的BUG,与预期发生了违背的现象,就能够及时让程序员将BUG修改过来,以免后期进行运行时出现严重的错误,软件的质量才得以保证。

3 结束语

JUnit的强大之处在于能够自动对测试方法进行测试且能够进行验证性的判断,大大改善了使用main函数进行测试的复杂程度,更多的程序员也乐意使用JUnit进行方便高效的单元测试,对提高软件生命周期和质量有着促进作用,同时也节省了软件的修复时间,减少了延迟发布的概率。在JUnit4出现之后,扩充了更多的新功能,不仅有着开源的优势,还能以JUnit为基础的Cactus扩充为服务器上的Java应用进行测试。目前由于软件测试在软件生命周期中占重要位置,所以以JUnit框架进行的Java单元测试也有着广阔的市场前景。

猜你喜欢
单元测试程序员测试用例
怎样成为一名优秀程序员
基于SmartUnit的安全通信系统单元测试用例自动生成
基于混合遗传算法的回归测试用例集最小化研究
基于依赖结构的测试用例优先级技术
软件回归测试用例选取方法研究