当前位置: 首页 > 知识库问答 >
问题:

如何测试扩展实现

沈俊晤
2023-03-14

JUnit5API中有几个可用的扩展点。

    null

我可以使用相同的模式,因为JupiterTestEngine上的public可见性。

下面有几个具体的例子来演示:

>

  • 基于系统属性启用测试的executioncondition。这可以通过一些反射和使用@beforeach@aftereach样式的TestInfo进行测试,但是当并行测试执行时,处理起来似乎更加复杂,可能会出现问题。此示例展示了“如何提供实际的extensioncontext并对结果进行断言”的示例。

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @ExtendWith(SystemPropertyCondition.class)
    public @interface SystemProperty {
      String key();
      String value();
    }
    
    public class SystemPropertyCondition implements ExecutionCondition {
      @Override
      public ConditionEvaluationResult evaluateExecutionCondition(final ExtensionContext context) {
        return context.getTestMethod()
            .flatMap(element -> AnnotationSupport.findAnnotation(element, SystemProperty.class))
            .map(systemProperty -> {
              if (systemProperty.value().equals(System.getProperty(systemProperty.key()))) {
                return ConditionEvaluationResult.enabled("Property is available");
              } else {
                return ConditionEvaluationResult.disabled("Property not equal");
              }
            })
            .orElseGet(() -> ConditionEvaluationResult.enabled("No annotations"));
      }
    }
    
    @ExtendWith(RunOnDayCondition.class)
    public @interface RunOnDay {
      DayOfWeek[] value();
    }
    
    final class RunOnDayCondition implements ExecutionCondition {
    
      private static final ConditionEvaluationResult DEFAULT = disabled(
          RunOnDay.class + " is not present"
      );
    
      @Override
      public ConditionEvaluationResult evaluateExecutionCondition(final ExtensionContext context) {
        return context.getElement()
            .flatMap(annotatedElement -> findAnnotation(annotatedElement, RunOnDay.class))
            .map(RunOnDay::value)
            .map(RunOnDayCondition::evaluateIfRunningOnDay)
            .orElse(DEFAULT);
      }
    
      private static ConditionEvaluationResult evaluateIfRunningOnDay(final DayOfWeek[] days) {
        // TODO: How would you inject a test clock?
        final DayOfWeek currentDay = LocalDate.now().getDayOfWeek();
        final boolean runningInday = Stream.of(days).anyMatch(currentDay::equals);
    
        if (runningInday) {
          return enabled("Current day is " + currentDay + ", in the specified days of " + Arrays.toString(days));
        } else {
          return disabled("Current day is " + currentDay + ", not in the specified days of " + Arrays.toString(days));
        }
      }
    }
    

    扩展测试的自定义测试引擎是正确的方法吗?

    那么,如何测试各种扩展实现而不依赖于内部API,并且不将工作“复制”到模拟中呢?

  • 共有1个答案

    公羊英达
    2023-03-14

    我知道这不是一个完整的答案(但我现在在手机上,你的问题很复杂)...但是,如果这个项目能帮助你,请尝试一下。

    如果你把你的问题限制一点,我可以试着更好地帮助你

     类似资料:
    • 有没有办法集成测试我的JUnit Jupiter扩展?当然,我可以测试扩展用法的一个很好的例子,但我想测试如下内容: 它没有通过预期的测试吗? 测试结束时写的报告是否正确? 对此有内置的支持吗?

    • 问题内容: 有人可以告诉我如何在Kotlin中对扩展功能进行单元测试吗?由于它们是静态解析的,应该将它们作为静态方法调用还是作为非静态方法进行测试?另外,由于语言可以与Java完全互操作,因此应如何针对Kotlin扩展功能执行Java单元测试? 问题答案: 好吧,要测试一种方法(无论是否静态),您可以像实际代码那样调用它,并检查它是否做对了。 例如,假设此扩展方法在文件com / foo / Ba

    • 有人能告诉我该如何在Kotlin中对扩展函数进行单元测试吗?由于它们是静态解析的,应该将它们测试为静态方法调用还是非静态方法调用?另外,由于语言与Java是完全可互操作的,那么应该如何执行Kotlin扩展函数的Java单元测试呢?

    • 我正在处理APK扩展文件,我查看了以下链接: 1)创建APK扩展文件的步骤 2)http://ankitthakkar90.blogspot.in/2013/01/apk-expansion-files-in-android-with.html 我已经从path sdk path/extras/google导入了market_许可、play_apk_扩展 play_apk_扩展包含三个项目down

    • 努力更新中...

    • 问题内容: 我正在尝试扩展Python,以用于越野比赛的结果。我想从格式为string的对象构造一个对象。我可以使用工厂设计模式和注释来完成此操作。我将如何通过覆盖和/或完成相同的任务? 使用下面的代码,构造一个对象会引发TypeError。请注意,未调用,因为未打印。 这是错误: 如果将代码从移至,则会得到以下结果。注意这次,输出显示我的函数被调用了。 问题答案: 显然,对象是不可变的,这意味着