单元测试
测试概述
在我们编写代码的时候,开发了很多功能,我们需要对这些已经开发好的功能提前进行测试,检测功能方法是否有漏洞,是否有bug,这个时候我们可以使用Junit单元测试对我们开发的代码进行测试。
Junit是Java语言的单元测试框架,属于第三方的一个工具,一般情况下我们需要导入相应的jar包,对于目前使用的集成开发工具自带的,我们今天是以Idear开发工具为主
Junit属于白盒测试
测试分类
- 黑盒测试:大多数测试的细节隐藏起来,通常使用的一些软件进行测试
- 白盒测试:大多数是需要写一些代码进行测试,我们能够看到一些测试的流程。
Junit使用
-
步骤
- 下载一个Junit对应的版本jar包
- 添加jar依赖到工程里面
- 定义一个测试类
- 建议:
- 测试类名:被测试的类Test 如:UserTest、PeopleTest、CalculatorTest…
- 测试类:应该放到测试资源包中
- 测试包:xxx.xxx.test 如:com.zhiyou100.test.user
- 定义测试方法:可以实现独立运行 Junit4/Junit5
- 建议:
- 方法名:test被测试的功能方法名 如:testGetName()、testAddNum()
- 返回值:void
- 参数列表:Junit4中–>空参 Junit5—>可以携带
- 修饰符:一般Junit4中使用public Junit5中使用范围较广
- 建议:
- 建议:
- 给方法上添加注解@Test
-
结果判定
-
红色—>测试失败,中间可能出现了异常
-
橘黄色 —> 测试失败 实际的值和我们期望的值不一致
-
绿色 —>测试成功
-
一般情况下,我们都是使用**断言(Assert)**操作来处理结果的
示例代码:
Assert.assertEquals(期望的值,实际的值);
-
-
Junit的其他测试相关的注解:
JUnit4中:
- @Test 把一个方法标记为测试方法
- @Before 每一个测试方法执行前会自动调用一次该方法(搭配@Test一起使用)
- @After 每一测试方法执行后会自动调用一次该方法(搭配@Test一起使用)
- @BeforeClass 所有的测试方法执行前执行一次,在测试类还没有进行实例化已经被加载到,标记的方法为静态方法(搭配@Test一起使用)
- @AfterClass 所有的测试方法执行后执行一次,在测试类还没有进行实例化已经被加载到,标记的方法为静态方法(搭配@Test一起使用)
- @Ignore 暂不执行该测试方法(待定的) (搭配@Test一起使用)
Junit5中:
- @Test 把一个方法标记为测试方法
- @BeforeEach 每一个测试方法执行前会自动调用一次该方法(搭配@Test一起使用)
- @AfterEach 每一测试方法执行后会自动调用一次该方法(搭配@Test一起使用)
- @BeforeAll 所有的测试方法执行前执行一次,在测试类还没有进行实例化已经被加载到,标记的方法为静态方法(搭配@Test一起使用)
- @AfterAll 所有的测试方法执行后执行一次,在测试类还没有进行实例化已经被加载到,标记的方法为静态方法(搭配@Test一起使用)
- @Disabled 暂不执行该测试方法(待定的) (搭配@Test一起使用)
- …
-
静态导入
JDK5之后出现的新特性,只要在import后面加上关键字static,就可以把后面类的static修饰的变量和方法导入到本类中。调用的时候和调用本类中的静态成员没有区别。
- 静态导入格式:import static 包名.类名.静态成员名 ----> import static 包名.类名.*
- 注意事项:
- 方法必须是静态的
- 如果有多个静态方法重名,添加前缀,即添加类名
-
@Test属性操作
-
expected属性 期望测试中携带有异常信息,格式 @Test(expected = NullPointerException.class)
如果出现异常,测试成功,如果未出现异常,测试失败
-
timeout属性,用来测试方法的执行时间 格式 @Test(timeout=5),单位为毫秒值,如果运行时间在设置值之内,则测试成功,如果超出了设置值范围,则测试失败。
-