当前位置: 首页 > news >正文

聊城网站优化网络推广太原工业学院教务网络管理系统

聊城网站优化网络推广,太原工业学院教务网络管理系统,杭州网站建设 杭州app,中国最强十大私企前言使用单元测试有时对方法的执行顺序有要求#xff0c;而默认情况下测试方法的执行并非按照编写顺序#xff0c;这就导致测试用例因执行顺序而导致的不通过。这里我使用的JUnit版本是5.6.2#xff0c;下面讲述如何自定义测试方法的执行优先级。TestMethodOrder这个注解标注…前言使用单元测试有时对方法的执行顺序有要求而默认情况下测试方法的执行并非按照编写顺序这就导致测试用例因执行顺序而导致的不通过。这里我使用的JUnit版本是5.6.2下面讲述如何自定义测试方法的执行优先级。TestMethodOrder这个注解标注在测试类上用于指定测试方法要以怎样的方式确定执行顺序Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented Inherited public interface TestMethodOrder {Class? extends MethodOrderer value(); }value()接收一个MethodOrderer类型这个类型是一个接口里面重要的有一个接口方法orderMethods以及三个静态实现类分别是Random、OrderAnnotation、Alphanumericpublic interface MethodOrderer {void orderMethods(MethodOrdererContext context);default OptionalExecutionMode getDefaultExecutionMode() {return Optional.of(ExecutionMode.SAME_THREAD);}// 随机顺序class Random implements MethodOrderer {// ...}// 根据Order注解确定执行顺序注意这个注解在org.junit.jupiter.api包下class OrderAnnotation implements MethodOrderer {// ...}// 按照方法名字母升序顺序如果方法名相同则拿方法的参数列表类型名称比较class Alphanumeric implements MethodOrderer {// ...} }其中比较重要的是void orderMethods(MethodOrdererContext context);接口方法如果你不满足于默认提供的三种实现可以实现此方法方法参数MethodOrdererContext可以获得测试方法的上下文信息据此定制方法执行顺序。一般来说上述提供的三种实现已基本满足需求有需要可参照三种实现。Random随机确定方法执行顺序只需要在测试类上标注如下TestMethodOrder(MethodOrderer.Random.class) class SampleTests {// methods ... }以下是Random的关键源码class Random implements MethodOrderer {private static final long DEFAULT_SEED;static {DEFAULT_SEED System.nanoTime(); // 默认的随机种子是系统时间单位纳秒}public static final String RANDOM_SEED_PROPERTY_NAME junit.jupiter.execution.order.random.seed; // 在配置文件中指定随机种子这个值必须是数值型Overridepublic void orderMethods(MethodOrdererContext context) {// 对方法随机洗牌Collections.shuffle(context.getMethodDescriptors(),new java.util.Random(getCustomSeed(context).orElse(DEFAULT_SEED)));}// 获取配置文件中指定的随机种子private OptionalLong getCustomSeed(MethodOrdererContext context) {return context.getConfigurationParameter(RANDOM_SEED_PROPERTY_NAME).map(configurationParameter - {Long seed null;try {seed Long.valueOf(configurationParameter);}catch (NumberFormatException ex) {}return seed;});}}OrderAnnotation如果需要为特定的方法指定执行顺序需要在测试类上标注TestMethodOrder(MethodOrderer.OrderAnnotation.class) 这个注解不能够单独使用需要配合方法上的注解org.junit.jupiter.api.Order确定执行顺序你可以只为希望按顺序执行的方法标注此注解而不是所有方法TestMethodOrder(MethodOrderer.OrderAnnotation.class) class SampleTests {TestOrder(1) // 优先执行void shouldUploadFileSuccess() throws Exception {}TestOrder(2) // 延后执行void shouldDeleteFileSuccess() throws Exception {}Test // 不会因执行顺序而导致失败可不指定Ordervoid shouldListAllFiles() throws Exception {} }Order注解中的value越小越优先执行没有标注Order的方法使用的是DEFAULT值Target({ ElementType.FIELD, ElementType.METHOD }) Retention(RetentionPolicy.RUNTIME) Documented public interface Order {int DEFAULT Integer.MAX_VALUE / 2;int value(); }下面是OrderAnnotation实现class OrderAnnotation implements MethodOrderer {Overridepublic void orderMethods(MethodOrdererContext context) {// java.util.Comparator.comparingIntcontext.getMethodDescriptors().sort(comparingInt(OrderAnnotation::getOrder));}// 获取方法上Order注解的value没有标注Order注解的方法使用的是Order注解上的DEFAULT值private static int getOrder(MethodDescriptor descriptor) {return descriptor.findAnnotation(Order.class).map(Order::value).orElse(Order.DEFAULT);}}方法排序表面使用的是Comparator接口的静态方法comparingInt实际使用的是java.lang.Integer.compare的比较逻辑public static int compare(int x, int y) {return (x y) ? -1 : ((x y) ? 0 : 1);}Alphanumeric按照方法名的字母升序排序执行如果方法名相同则拿方法的参数列表类型名称比较TestMethodOrder(MethodOrderer.Alphanumeric.class) class AlphaTests {Test // 后执行void b() {}Test // 先执行void a() {} }下面是这种方式的实现class Alphanumeric implements MethodOrderer {Overridepublic void orderMethods(MethodOrdererContext context) {context.getMethodDescriptors().sort(comparator);}private static final ComparatorMethodDescriptor comparator Comparator.MethodDescriptor, String// 拿方法名比较 comparing(descriptor - descriptor.getMethod().getName())// 如果测试方法的名称相同则进一步比较方法上的参数列表的类型.thenComparing(descriptor - parameterList(descriptor.getMethod()));// 将方法的参数列表类型处理成形如java.lang.String,java.lang.Integerdprivate static String parameterList(Method method) {return ClassUtils.nullSafeToString(method.getParameterTypes());}}上面parameterList方法用到的ClassUtils是JUnit自身的实际并没什么可看就是对给定的类型列表名称做逗号拼接处理使用的是Java 8中的函数式编程自行了解public final class ClassUtils {private ClassUtils() {}public static String nullSafeToString(Class? clazz) {return clazz null ? null : clazz.getName();}// method.getParameterTypes()得到的是一个数组所以使用的的是这个方法public static String nullSafeToString(Class?... classes) {// Class:getName clazz - clazz.getNamereturn nullSafeToString(Class::getName, classes);}// Function? super Class?, ? extends String mapper表示传入的是一个Class类型// 将会产生一个String类型public static String nullSafeToString(Function? super Class?, ? extends String mapper, Class?... classes) {Preconditions.notNull(mapper, Mapping function must not be null);return classes ! null classes.length ! 0 ? (String)Arrays.stream(classes).map((clazz) - {// mapper.apply(clazz)将调用nullSafeToString(Class::getName, classes)// 中的Class::getName用于获取类型限定名称return clazz null ? null : (String)mapper.apply(clazz);}).collect(Collectors.joining(, )) : ;} }软件版本软件版本JUnit5.6.2junit-jupiter
http://www.yutouwan.com/news/288660/

相关文章:

  • 做折线图网站推广计划英文
  • 网站创作思路wordpress静态加速
  • 万建站南昌环球贸易网站
  • 设计公司网站详情seo大全
  • 深圳网站设计公司哪家工艺好找人做网站做的很烂
  • 重庆做蔬菜配送的网站有哪些郑州seo优化顾问阿亮
  • 网站幻灯片尺寸设置定制手机app价格
  • 做网站和游戏是如何赚钱阿里云怎样做商城式网站
  • 推广网站建设一部手机怎么做电商
  • 网站建设价格对比分析logo设计公司有哪些职位
  • 怎么给网站 做排名wordpress t1主题
  • 长春做网站用的软件阜新网站建设
  • 入门做外贸是先建网站还是先参展网站是做响应式还是自适应的好
  • 常州网站推广排名重庆百度推广的代理商
  • 好用的网站开发框架2345网址导航电脑版下载
  • 博客网站建设方案济南房地产网
  • 广州做网站seo公司做竞拍网站的收入怎么报税
  • 为什么建设法律法规网站Wordpress 提交百度
  • zenme用ps做网站图网站开发团队配置
  • 海安网站优化网络营销存在的问题及解决对策
  • 襄城县住房和城市建设局网站德阳做网站的互联网公司
  • 贺州市住房与城乡建设局网站wordpress 薄荷主题
  • 网站自己怎么做的网站建设 洪塔
  • 网站主办者免费虚拟机安卓版
  • .net营销网站开发山西手动网站建设推广
  • 网站建设域名申请免费企业网站如何建设
  • 做网站用什核工业西南建设集团有限公司网站
  • 私人建设手机网站宜兴市建设局网站
  • 图片上传不了网站校园网站群建设
  • 北京新闻媒体沈阳seo关键字优化