网站建设找客户,吉安永新哪里做网站,陕西机械加工网,网站开发页面布局排序
我们同一个类下的多个用例的执行顺序是不确定的#xff0c;如果需要指定固定的顺序#xff0c;则需要在类上加这个注解
TestMethodOrder(MethodOrderer.OrderAnnotation.class)然后在想要第一个执行的用例上加上
Order(1)第二个执行的用例上注解#xff1a;
Order(…排序
我们同一个类下的多个用例的执行顺序是不确定的如果需要指定固定的顺序则需要在类上加这个注解
TestMethodOrder(MethodOrderer.OrderAnnotation.class)然后在想要第一个执行的用例上加上
Order(1)第二个执行的用例上注解
Order(2)以此类推
例如没有order注解时
import org.junit.jupiter.api.Test;public class aaa {Testvoid two(){System.out.println(aaa two);}Testvoid one(){System.out.println(aaa one);}Testvoid three(){System.out.println(aaa three);}
}执行顺序是one two three 有了order注解:
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class aaa {TestOrder(1)void two(){System.out.println(aaa two);}TestOrder(2)void one(){System.out.println(aaa one);}TestOrder(3)void three(){System.out.println(aaa three);}
}就会按照我们想要的顺序执行了 并且需要注意的是我们的Test注解还是需要加上的否则会无法正确执行
参数化
我们可以自定义要进行测试的参数
单数据源
使用下面两个注解来进行单一参数设置
ParameterizedTestValueSource(数据类型类{参数1,参数2...})其中数据类型类可以参照下面这个表
数组数据类型类short[]shortsbyte[]bytesint[]intslong[]longsdouble[]doubleschar[]charsboolean[]booleansString[]stringsClass?classes
例如输出所有的string类型的参数
ParameterizedTest
ValueSource(strings {curry, lebron, durant})
void ontParamTest(String name){System.out.println(name);
}多数据源直接传输数据
使用下面两个注解来进行多参数设置
ParameterizedTestCsvSource({参数1数据1, 参数1数据2, 参数2数据1, 参数2数据2...})例如输出string类型和int类型的参数
ParameterizedTest
CsvSource({curry,30,lebron,23,durant,35})
void multiParamsTest(String name, int id){System.out.println(name 穿 id 号码);
}多数据源通过文件传输
当我们的数据过多时直接写在代码上显得十分冗余因此我们可以写在表哥中让代码从文件中读取数据
这里的文件是.csv文件
通过下面两个注解来使用
ParameterizedTestCsvFileSource(files 文件路径)例如 先创建一个.csv文件 然后编写代码
ParameterizedTest
CsvFileSource(files /Users/lixiao/Desktop/NameAndId.csv)
void csvFileParamsTest(String name, int id){System.out.println(name 穿 id 号码);
}动态方法生成数据源
我们可以动态的生成数据源 使用下面两个注解
ParameterizedTestMethodSource(提供数据源方法名)如果返回的数据类型统一那么提供数据的方法最终直接返回具体的类型并且需要是静态的 例如
ParameterizedTest
MethodSource(ParamsSupport)
void DynamicParamsTest(String name){System.out.println(name);
}static String[] ParamsSupport() throws InterruptedException {String[] arr new String[5];for (int i 0; i arr.length; i) {arr[i] System.currentTimeMillis() ;Thread.sleep(3);}return arr;
}如果返回的数据类型不统一提供数据的方法最终返回的是数据流并且需要是静态的
static StreamArguments 方法名代码案例
ParameterizedTest
MethodSource(ParamsSupport)
void DynamicParamsTest(String name, int id){System.out.println(name 穿 id 号码);
}static StreamArguments ParamsSupport() throws InterruptedException {String[] arr new String[5];for (int i 0; i arr.length; i) {arr[i] System.currentTimeMillis() ;Thread.sleep(3);}return Stream.of(Arguments.arguments(arr[0], 20),Arguments.arguments(arr[1], 20),Arguments.arguments(arr[2], 20),Arguments.arguments(arr[3], 20),Arguments.arguments(arr[4], 20));
}MethodSource中也可以不写方法名提供数据的方法和使用数据的方法同名即可
并且使用了参数化ParameterizedTest注解的方法不能再用Test注解
测试套件
想要同时测试多个类就需要使用测试套件这些要执行的测试类必须有Test注解 先创建一个类使用下面这个注解标明该类是测试套件类
Suite指定类名
使用下面这个注解来指定要执行的类名
SelectClasses({类1.class, 类2.class ...})例如
Suite
SelectClasses({aaa.class, bbb.class})
public class runSuite {}指定包名
使用下面这个注解来指定要执行的类所在的包名
SelectPackages(包名)例如
Suite
SelectPackages(autoTest0212)
public class runSuite {}我们包的结构如下 但是调用该方法后只运行了junitTest和cccTests 这是因为使用指定包名来运行所有测试类必须要该类命名以“Test”或者“Tests”为结尾并且T必须为大写