JUnit5API中有几个可用的扩展点。
我可以使用相同的模式,因为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,并且不将工作“复制”到模拟中呢?
我知道这不是一个完整的答案(但我现在在手机上,你的问题很复杂)...但是,如果这个项目能帮助你,请尝试一下。
如果你把你的问题限制一点,我可以试着更好地帮助你
有没有办法集成测试我的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。请注意,未调用,因为未打印。 这是错误: 如果将代码从移至,则会得到以下结果。注意这次,输出显示我的函数被调用了。 问题答案: 显然,对象是不可变的,这意味着