前面环境搭建好了,我们来写一个JUnit的单元测试,然后分析里面代码,引出一些JUnit的基本概念。
1.环境准备
新建一个overview包,然后新建一个Test01.java文件,写入下面代码内容。
package overview;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class Test01 {
@Test
public void test1() {
assertEquals(5, "hello".length());
}
}
保存之后,JUnit自动添加到了build path依赖。
这个可以看出使用Junit的版本号。
2.代码解释
@Test
public void test1() {
assertEquals(5, "hello".length());
}
在Junit中,任何测试方法如果想要通过JUnit方式运行,这些方法前面一行需要添加@Test注解。添加了这个注解,就是告诉JUnit框架,这个方法是一个JUnit测试用例,不加就是Java中普通的方法。在添加这个注解过程,会提示要导入JUnit的Test包,所以导包语句中有 import org.junit.Test;
这个地方有很多知识点,我们一个一个来讲。
2.1 JUnit方法只能使用public修饰
关于这点,我们把public 改成private,然后运行下。
如果是private修饰,会报Java异常,没有找到匹配的测试。
2.2 JUnit方法不能有返回值。
把Junit方法换成下面代码,尝试执行下run as junit。
@Test
public int test1() {
assertEquals(5, "hello".length());
return 1 + 1;
}
得到和2.1中相同的异常,所以记住Junit测试方法中没有返回值,必须是void。
2.3 早期JUnit方法名称必须是test开头,现在可以是任意。
这里说一下,为什么我写方法名称是test1(), 这个是个人习惯。因为早期JUnit版本就是要求方法名称必须小写的test开头,后来最新和JUnit4和JUnit5就没有这个要求,方法名称可以随便取,例如下面的例子。
@Test
public void verifyStringLength() {
assertEquals(5, "hello".length());
}
上面方法名称为verifyStringLength,验证字符长度,也是可以运行
2.4 断言
在JUnit中,关于断言,有很丰富的封装好的断言,判断方法供我们使用,这也是作为Java程序员使用JUnit写单元测试的一个理由。既然有轮子,为什么还要去造轮子呢。
assertEquals(5, "hello".length());
这个断言方法是判断两个对象相等,第一个参数是期待结果,第二个参数是实际结果。
关于想了解更多断言,在Junit中断言方法一般是assert开头,然后你根据代码提示,选择你需要的断言方法
2.5 更多注解
上面我说了一个@Test注解,如果要非常熟练使用JUnit,我们还需要学习以下常见的注解。
@Test
@Before
@After
@BeforeClass
@AfterClass
@Ignore
@Test(expected = Exception.class)
@Test(timeout=100)
这些注解,我们后面文章会逐一介绍到。