目录
使用JUnit
导入依赖
使用Junit
添加前置/后置操作
当项目十分庞大时,如果想测试一个很小的功能,都要启动整个项目来测试,会很浪费时间。
那能否将某个小功能单独拆出来进行测试呢?
这就是单元测试的作用。而JUnit就是一个常用的单元测试工具
使用JUnit
导入依赖
JUnit版本分为JUnit4和JUnit5,在这里讲解JUnit4版本,今后也会讲解JUnit5
使用导入依赖的方式开启JUnit工具
在JUnit官网:Central Repository: junit/junit/4.13.2
下载JUnit的jar包:
junit-4.13.2.jar
放入文件根目录中,在IDEA中右键添加为库(add to library)即可
注意,如果使用的junit版本是4.11以上,必须要添加hamcrest-core包,配套使用(添加的方法和junit一致)
Maven Repository: org.hamcrest » hamcrest-core » 1.3
使用Junit
使用JUnit的方法非常简单,在想要使用单元测试的方法前添加@Test注解即可
注意,测试方法必须满足以下要求:
- 必须为public
- 不能是静态方法
- 返回值必须为void
- 必须是没有任何参数的方法
可以看到,添加了注解的方法前增加了一个小绿色按钮:
点击方法前的绿色按钮运行,运行结果如下:
可以看到在控制台的成功输出
如果想一次性执行类中所有的测试用例,可以点击类旁边的两个绿色小箭头。
如果我们想判断测试的结果是否是我们所期望的一个值,可以使用个断言工具类Assert来进行判定
asserEquals()方法可以判断传入的两个参数是否相等,第一个参数为我们期望得到的值,第二个为实际的值,如果期望的值和实际的值不相等,则测试用例会显示失败。
例如在上述代码中,expected的1和actual的2明显不同,这样运行的结果就会变成:
JUnit还提供了很多判定方法,根据比较的类型的不同,可以使用不同的方法,例如这里比较的是int类型的数据,使用assertEquals()方法,如果要比较数组,可以使用assertArrayEquals()方法
assertEquals()方法不仅可以比较基本类型,也可以比较对象等
比如想比较两个student对象,可以这么做:
@Testpublic void method(){try(SqlSession session = MyBatisUtil.getSession(true)){TestMapper mapper = session.getMapper(TestMapper.class);student s = mapper.getStudentById(1);Assert.assertEquals(new student().setNumber(1).setName("lily").setGender("w"),s);}}
添加前置/后置操作
如果我们想在所有的测试之前进行一些前置(后置)操作,有两种办法:
- 在所有的测试用例之前都添加前置(后置)操作
- 使用@Before(@After)注解来添加
很明显使用注解是一种更好的方法
@Before
public void before(){System.out.println("before test");
}@Test
public void test1(){System.out.println("test1");
}@Test
public void test2(){System.out.println("test2");
}@After
public void after(){System.out.println("after test");
}
上述代码的输出结果为:
before test
test1
after test
before test
test2
after test
可以看到,在执行test前先执行了before方法,在test后执行了after方法
但是这也有个问题,一般情况下,before(after)方法只需要执行一次,就可以完成所有test前置(后置)操作。而每个test前都执行一次before(after),显得有些赘余。
这个问题将在Junit5中得到解决,后续文章中会进行介绍