最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

【单元测试】Junit 4(七)--junit4 TestRunnner

来源:博客园

Test Runners

我没想到一个特别合适的词来形容Test Runners的作用,所以多说几句:

Test Runners 是具有特殊功能的执行测试用例的通道,也可以理解为测试的执行者,例如可以同时运行多个测试用例,也可以具有这个测试执行者特有的功能。

用法1


(资料图片)

/** *      Test Runner 示例代码 */public class TestRunnerDemo {    @Test    public void runnerTest(){        org.junit.runner.JUnitCore.runClasses(ExampleUnitTest.class, StudentTest.class);    }}

我们可以通过org.junit.runner.JUnitCore.runClasses()方法来同时运行多个测试class文件,里面的参数个数是随意的,例如示例代码中按照顺序运行了ExampleUnitTest.class和StudentTest.class。

用法2

/** *      Test Runner 实例代码2 */@RunWith(Suite.class)// 绑定的测试用例集合@Suite.SuiteClasses({ExampleUnitTest.class, StudentTest.class})public class TestRunnerDemo2 {}

With与其他测试用例进行绑定,然后@Suite.SuiteClasses({ExampleUnitTest.class, StudentTest.class})来设置绑定的测试用例的集合,当运行这个测试用例的时候,绑定的集合也会运行。

用法3

package com.lzp.unittestdemo.testrunner;import com.lzp.unittestdemo.Utils;import org.junit.Assert;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.Parameterized;import org.junit.runners.Parameterized.Parameters;import java.util.Arrays;import java.util.Collection;/** * 

* Test Runner 示例代码3 */@RunWith(Parameterized.class)public class TestRunnerDemo3 { /** * name可以用来描述这个测试的信息 * 其中{index}表示当前的索引值,因为执行的时候会遍历集合 * {0} 表示参数键值对的第一个位置 * {1} 表示参数键值对的第二个位置,坐标以此类推 */ @Parameters() public static Collection data() { return Arrays.asList(new Object[][]{ {0, 0}, {1, 1}, {2, 1}, {3, 2}, {4, 3}, {5, 5}, {6, 8} }); } private int fInput; private int fExpected; /** * 这里模拟了创建对象的过程,Juit会自动把@Parameters里面的数据集合,按照顺序依次放入构造方法中 * */ public TestRunnerDemo3(int input, int expected) { fInput = input; fExpected = expected; System.out.println(input + " :" + expected); } /** * 测试方法,通过Assert.assertEquals判断参数是否符合我们的期望 * */ @Test public void test() { Assert.assertEquals(fExpected, Utils.compute(fInput)); }}

使用@RunWith(Parameterized.class)会稍微复杂一点,但是使用起来非常的方便,我们可以创建很多个相同类型的对象,然后通过测试方法对属性进行操作,验证我们创建的类是否符合我们的期望。

用法4

@RunWith(Categories.class)// 为这个测试添加分类@Category(MyCategory.class)// 绑定的测试类集合@Suite.SuiteClasses( { TestRunnerDemo.class, TestRunnerDemo3.class })// 交集,运行SuiteClasses中与自己分类相同的测试类//@Categories.IncludeCategory(MyCategory.class)// 除去交集,运行SuiteClasses中与自己分类不同的测试类@Categories.ExcludeCategory(MyCategory.class)public class TestRunnerDemo4 {    @Test    public void test(){        assertEquals(4, 2 + 2);    }}

使用@Category可以对测试类添加分类,然后和@Suit结合使用,可以同时运行相同分类或不同分类的测试,算是上一种用法的升级版。

用法5

有时候我们会把测试方法卸载内部类中,这个时候我们需要使用@RunWith(Enclosed.class),这样可以运行内部类的测试方法, 这里贴出官方的demo连接:https://github.com/junit-team/junit4/wiki/"Enclosed"-test-runner-example ,大家可以学习一下。

用法6

使用第三方的Test Runner:

这是官网的举例,之后我们会用到MockitoJUnitRunner,其他的大家可以自己去了解一下如何使用。

关键词: