1.2.1.4 @AfterClass@AfterClasspublic static void tearDown()throws Exception {// 关闭资源}
在所有方法执行之后执行,一般被用作执行类似关闭数据库连接的任务 。被@AfterClass 注解的方法应该是静态的(即 static类型的) 。
1.2.1.5 @Test@Testpublic void test01() { // 测试,断言等}
包含了真正的测试代码,并且会被Junit应用为要测试的方法 。
@Test注解有两个可选的参数:
- expected表示此测试方法执行后应该抛出的异常,(值是异常名)
- timeout检测测试方法的执行时间
注意:JUnite4的执行顺序:@BeforeClass > @Before > @Test1 > @After > @Before > @Test2 > @After ...... > @AfterClass
1.2.1.7 示例
import static org.junit.Assert.*;import org.junit.After;import org.junit.Before;import org.junit.Test;public class DemoTest { @BeforeClass public static void setup()throws Exception {// 这里初始化资源(如连接数据库) } @AfterClass public static void tearDown()throws Exception {// 关闭资源() } @Before public void setUp() throws Exception {System.out.println("SetUp.....");// 这里初始化我们所需要的资源 } @After public void tearDown() throws Exception {System.out.println("Gone.....");// 这里关闭我们的资源 } @Test public void test01() {// 测试1 } @Ignore @Test public void test02() {// 测试2 }}
1.2.2 打包测试Suite相关的注解1.2.2.1 @RunWith(Suite.class)需要一个特殊的Runner, 因此需要向@RunWith注解传递一个参数Suite.calss 。1.2.2.2 @Suite.SuiteClasses(...{xx.class, xx.class, ...})用来表明这个类是一个打包测试类,把需要打包的类作为参数传递给该注解即可 。
1.2.2.3 示例有了这两个注解之后,就已经完整的表达了所有的含义,因此下面的类无关紧要,随便起个类名,内容为空
import org.junit.runner.RunWith;import org.junit.runners.Suite;import org.junit.runners.Suite.SuiteClasses;public class DemoTest { @RunWith(Suite.class) @SuiteClasses({Demo01.class, Demo02.class, Demo03.class}) public class AllTests { }}
1.2.3 参数化测试相关的注解1.2.3.1 @RunWith(Parameterized.class)首先要为这种测试专门生成一个新的类,而不能与其他测试共用同一个类 。这里不使用默认的Runner了,使用带有参数化功能的Runner 。
@RunWith(Parameterized.class)这条语句就是为这个类指定了ParameterizedRunner 。
这个需要和我们后面的@Parameters组合使用
1.2.3.2 @Parameters放在方法上 。
定义一个待测试的类,并且定义两个变量,一个用于存放参数,一个用于存放期待的结果 。
定义测试数据的结合,就是下方的prepareData()方法,该方法可以任意命名,但是必须使用@Parameters标注进行修饰 。
这里需要注意:其中的数据是一个二维数组,数据两两一组,每组中的这两个数据,一个是参数,一个是预期的结果 。比如第一组{2,4}中:2是参数,4是预期结果 。这两数据顺序无所谓 。
然后,是构造函数,其功能就是对先前定义的两个参数进行初始化 。这里要注意参数的顺序,要和上面的数据集合的顺序保持一致 。(比如都是先参数后结果)
那么这里我们还是看下面的例子吧
1.2.3.3 示例
import static org.junit.Assert.assertEquals;import java.util.Arrays;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.Parameterized;import org.junit.runners.Parameterized.Parameters;@RunWith(Parameterized.class)public class FibonacciTest {@Parameters(name = "{index}: fib({0})={1}")public static Iterable<Object[]> data() {return Arrays.asList(new Object[][] {{ 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 }});}private int input;private int expected;public FibonacciTest(int input, int expected) {this.input = input;this.expected = expected;}@Testpublic void test() {assertEquals(expected, Fibonacci.compute(input));}}
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 2023年9月17日取蜂蜜好不好 2023年9月17日取蜂蜜好吗
- 2023年1月29日清扫房屋好吗 2023年农历正月初八清扫房屋吉日
- 哪种级别的橄榄油营养价值更高?
- 2023年9月17日灌溉好吗 2023年9月17日是灌溉吉日吗
- 2023年1月29日坐邮轮黄道吉日 2023年1月29日坐邮轮好不好
- 2023年9月17日买鱼好吗 2023年农历八月初三买鱼吉日
- 2023年1月29日安装窗帘行吗 2023年1月29日是安装窗帘的黄道吉日吗
- 2023年农历九月十二能不能搬家入伙
- 2023年农历正月初八宜厨房移位吗 2023年1月29日厨房移位行吗
- 2023年农历九月二十一可以搬家吗