基础4:JUNIT4
作用
简单来讲,就是用来取代传统的main方法。
基于Idea创建单元测试
选中类名,然后鼠标右击,选择Go To -> Test(或者使用快捷键ctrl+ shift + t)
然后选中要测试的JUnit版本、方法,然后点击OK
在生成的add方法里面进行编写测试的内容,然后鼠标右击,选择Run XXXTest,然后查看结果
查看结果为绿色,则表示通过,否则红色为未通过
assertThat与org.hamcrest.Matcher接口
assertThat方法理论上来讲可以替换其他assertXXX方法。该方法有2个参数:
其中第2个参数是:org.hamcrest.Matcher接口,该接口的实现类就1个:
修改之后为:
org.hamcrest.CoreMatchers
单元测试注解
1>@Test:测试方法,该注解有2个参数:
expected:定义测试方法应该抛出的异常,如果测试方法没有抛出异常或者抛出了一个不同的异常,测试失败;
timeout:如果测试运行时间长于该定义时间,测试失败(单位为毫秒);
2>@Ignore:对包含测试类的类或@Test注解方法使用@Ignore注解将使被注解的类或方法不会被当做测试执行;
3>@Before:当编写测试方法时,经常会发现一些方法在执行前需要创建相同的对象使用@Before注解一个public void 方法会使该方法在@Test注解方法被执行前执行(有几个@Test方法,那么@Before就要执行几次,每个@Test方法都要执行@Before)父类的@Before注解方法会在子类的@Before注解方法执行前执行;
4>@After:如果在@Before注解方法中分配了额外的资源,那么在测试执行完后,需要释放分配的资源。使用@After注解一个public void方法会使该方法在@Test注解方法执行后被执行(有几个@Test方法,那么@After就要执行几次,每个@Test方法都要执行@After)即使在@Before注解方法、@Test注解方法中抛出了异常,所有的@After注解方法依然会被执行;
5>@BeforeClass:有些时候,一些测试需要共享代价高昂的步骤(如数据库登录),这会破坏测试独立性,通常是需要优化的使用@BeforeClass注解一个public static void 方法,并且该方法不带任何参数,会使该方法在所有测试方法被执行前执行一次(一个java文件只运行一次,在类初始化之前就要执行,因此必须是static),并且只执行一次父类的@BeforeClass注解方法会在子类的@BeforeClass注解方法执行前执行;
6>@AfterClass:如果在@BeforeClass注解方法中分配了代价高昂的额外的资源,那么在测试类中的所有测试方法执行完后,需要释放分配的资源。使用@AfterClass注解一个public static void方法会使该方法在测试类中的所有测试方法执行完后(一个java文件只运行一次,在类初始化之前就要执行,因此必须是static)被执行即使在@BeforeClass注解方法中抛出了异常,所有的@AfterClass注解方法依然会被执行父类中的@AfterClass注解方法会在子类@AfterClass注解方法执行后被执行;