gpt4 book ai didi

java - 如何在 JUnit 4.12 中组合 @Rule 和 @ClassRule

转载 作者:搜寻专家 更新时间:2023-10-31 20:01:12 24 4
gpt4 key购买 nike

根据 the 4.12 release notes , 可以同时使用@Rule 和@ClassRule 注释测试类的静态成员:

a static member annotated with both @Rule and @ClassRule is now considered valid. This means a single rule may be used to perform actions both before/after a class (e.g. setup/tear down an external resource) and between tests (e.g. reset the external resource),

我想使用此功能在文件中的所有测试开始时初始化资源,在每次测试之间对资源进行一些清理,并在所有测试完成后处理它。此资源当前由扩展 ExternalResource 的类表示.

在我的beforeafter 方法中,如何区分“所有测试之前/之后”和“每次测试之前/之后”?我是否需要使用 TestRule 的不同/自定义实现来完成此操作?

最佳答案

你可以实现TestRule#apply并使用 isTestisSuite Description 的方法确定什么样的Statement你的TestRule正在应用于。

这是一个示例界面,您可以构建该界面以提供具有完整 before 的规则, after , verify , beforeClass , afterClass , verifyClass类型行为:

public interface CombinedRule extends TestRule {
default Statement apply(Statement base, Description description) {
if (description.isTest()) {
return new Statement() {
public void evaluate() throws Throwable {
before();
try {
base.evaluate();
verify();
} finally {
after();
}
}
};
}
if (description.isSuite()) {
return new Statement() {
public void evaluate() throws Throwable {
beforeClass();
try {
base.evaluate();
verifyClass();
} finally {
afterClass();
}
}
};
}
return base;
}

default void before() throws Exception {
//let the implementer decide whether this method is useful to implement
}

default void after() {
//let the implementer decide whether this method is useful to implement
}

/**
* Only runs for Tests that pass
*/
default void verify() {
//let the implementer decide whether this method is useful to implement
}

default void beforeClass() throws Exception {
before();
}

default void afterClass() {
after();
}

/**
* Only runs for Suites that pass
*/
default void verifyClass() {
verify();
}
}

关于java - 如何在 JUnit 4.12 中组合 @Rule 和 @ClassRule,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32384278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com