利用junit4怎么实现一个单元测试功能

  介绍

今天就跟大家聊聊有关利用junit4怎么实现一个单元测试功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

Junit单元测试框架是Java程序开发必备的测试利器,现在最常用的就是junit4了,在junit4中所有的测试用例都使用了注解的形式,这比Junit3更加灵活与方便。之前在公司的关于单元测试的培训课程中,讲师仅仅讲述了junit4的基本的与生命周期相关的注解的使用,主要包括@BeforeClass, @Before, @Test, @After, @AfterClass这些注解,这些在应付普通简单的单元测试已经足够,然而有很多更加复杂且也会经常遇到的测试需求依靠这些生命周期注解并不能完成!因此这篇分享将为您呈现junit4的另一片新大陆,且看陈述…

,,,,,,其实,在单元测试培训课程中,讲师并没有讲到Junit4的核心,例如为什么Junit没主要有()方法就能运行(因为我们知道无论是什么程序都必须得有一个程序入口,而它通常是主要);在例如Junit的核心组成部分是什么?如何更改Junit在运行单元测试时获取数据和执行测试的行为?更具体一点,如果我要为一个需要两个参数的方法进行测试,如何使用我所提供的参数的所有排列组合对方法进行测试?如果我需要在茫茫的测试用例中只测试与特定类相关的用例该怎么做……。

,,,,,在这之前,先纠正一点- - - - - - Junit4可以直接运行我们的某个方法,没有主要入口函数是断然不行的。正如我之前给我们组的一个妹子讲春天的时候告诉她,在测试方法中,对测试方法所在的类添加弹簧的(承担者注解或者为该类的成员变量添加)资源注解并没有什么卵用,即春根本不会来扫描这个测试类,更不会为这个类注入属性值。为什么这么说呢?因为弹簧是在测试类中由被@Before标注的方法所启动的,这时候,JVM已经将此测试类实例化了,而这并不是由弹簧实例化的,春天晚了一步,所以在春天的容器中并没有此类的实例。那么Junit4真的有主方法吗?没错,既然它能直接运行我们的方法,那它必然自己为JVM提供了程序入口。其实在org.junit.runner包下,有个JUnitCore.class,其中就有一个标准的主方法,这就是JUnit入口函数。如此看来,它其实和我们直接在自己的主方法中跑我们要测试的方法在本质上是一样的。

,,,,接下来,我要说的就是Junit测试框架的新大陆,或者说是其核心组件,也正是讲师所没有讲到但却十分有用的东西跑- - - - - -,即Junit的运行器!

,,,,运动员只是一个抽象类,表示用于运行Junit测试用例的工具,通过它可以运行测试并通知通知运行的结果。通常我们可以在待测方法所在的类之上使用@RunWith注解来为这个测试类指定一个特定的跑步者。不过在很多情况下,我们并没有这么做,那是因为,我们使用了Junit的默认Runnner——BlockJunit4ClassRunner。当我们不为测试类添加@RunWith注解的时候,其实使用的就是这个选手,它作为默认运动员只为我们提供了基本的基于Junit生命周期的测试注解。而有更多非常规的测试需求,则需要我们为测试类添加@RunWith注解并指定特定的运动员来完成!下面列出一些比较有用的跑步运动员。

一、西装——它可以一次生执行全面在多个类中的测试用例,例如:

@RunWith (Suite.class)   @SuiteClasses({人。类,People.class})   公开课TestSuitMain {//虽然这个类是空的,但依然可以运行Junit测试,运行时,它会将Person.class和//People.class中的所有测试用命都执行一遍!   }

二、参数化- - - - - -在普通的单元测试中被@Test注解标注的测试方法只能是公共无效的,且不能有任何输入参数。而这时常会给我们造成困扰,因为有时候我们需要为测试方法输入参数,甚至是批量指定多个待测参数。这时参数化这个跑步者就能满足我们的要求,用法如下:

@RunWith (Parameterized.class)   公开课TestGenerateParams {   私人字符串的问候;   公共TestGenerateParams(字符串问候){   超级();   这一点。问候=问候;   }   @Test   公共空间testParams () {System.out.println(问候);   }/* *   *这里的返回的应该是一个可迭代数组,且方法必须是公共静态   * @return   */@ phase   公共静态列表getParams () {   返回数组。asList(新String [] [] {{“hello"}, {“hi"},{“好morning"},{:“怎么你。}});   }   }

三、类别- - - - - -继承自西装,更强大,它可以让我们对测试类中被测试的方法进行分类执行,例如人对象具有一些属性,这些属性拥有获?设置方法,同时还有一些普通方法。我们可以将获取属性的获得方法和普通方法进行分类测试。如:

利用junit4怎么实现一个单元测试功能