通过main方法是可以进行测试的,可以测试程序是否正常运行。但是main方法进行测试时,会存在如下问题:
测试代码与源代码未分开,难维护。一个方法测试失败,影响后面方法。无法自动化测试,得到测试报告。
而如果我们使用了JUnit单元测试框架进行测试,将会有以下优势:
测试代码与源代码分开,便于维护。可根据需要进行自动化测试。可自动分析测试结果,产出测试报告。
入门程序
需求:使用JUnit,对UserService中的业务方法进行单元测试,测试其正确性。
在pom.xml中,引入JUnit的依赖。
- <!--Junit单元测试依赖-->
- <dependency>
- <groupId>org.junit.jupiter</groupId>
- <artifactId>junit-jupiter</artifactId>
- <version>5.9.1</version>
- <scope>test</scope>
- </dependency>
复制代码 在test/java目录下,创建测试类,并编写对应的测试方法,并在方法上声明@Test注解。
- @Test
- public void testGetAge(){
- Integer age = new UserService().getAge("110002200505091218");
- System.out.println(age);
- }
复制代码
注意:
- 测试类的命名规范为:XxxxTest
- 测试方法的命名规定为:public void xxx(){...}
断言
JUnit提供了一些辅助方法,用来帮我们确定被测试的方法是否按照预期的效果正常工作,这种方式称为断言。
- package com.heima;
- import org.junit.jupiter.api.*;
- import org.junit.jupiter.params.ParameterizedTest;
- import org.junit.jupiter.params.provider.ValueSource;
- public class UserServiceTest {
-
- @Test
- public void testGetAge2(){
- Integer age = new UserService().getAge("110002200505091218");
- Assertions.assertNotEquals(18, age, "两个值相等");
- // String s1 = new String("Hello");
- // String s2 = "Hello";
- // Assertions.assertSame(s1, s2, "不是同一个对象引用");
- }
- @Test
- public void testGetGender2(){
- String gender = new UserService().getGender("612429198904201611");
- Assertions.assertEquals("男", gender);
- }
- }
复制代码 常见注解
在JUnit中还提供了一些注解,还增强其功能,常见的注解有以下几个:
- public class UserServiceTest {
- @BeforeEach
- public void testBefore(){
- System.out.println("before...");
- }
- @AfterEach
- public void testAfter(){
- System.out.println("after...");
- }
- @BeforeAll //该方法必须被static修饰
- public static void testBeforeAll(){
- System.out.println("before all ...");
- }
- @AfterAll //该方法必须被static修饰
- public static void testAfterAll(){
- System.out.println("after all...");
- }
- @Test
- public void testGetAge(){
- Integer age = new UserService().getAge("110002200505091218");
- System.out.println(age);
- }
-
- @Test
- public void testGetGender(){
- String gender = new UserService().getGender("612429198904201611");
- System.out.println(gender);
- }
- }
复制代码 作用范围:
- 主程序范围有效。(main文件夹范围内)
- 测试程序范围有效。(test文件夹范围内)
- 是否参与打包运行。(package指令范围内)
可以在pom.xml中配置 <scope></scope> 属性来控制依赖范围。
|