JUnit 5:在什么条件下ExtensionContext.getTestMethod()不可用?



我正在使用一个JUnit 5扩展,我使用ExtensionContext.getTestMethod()从测试方法中提取注释。

Optional<Method> testMethod = context.getTestMethod();
if (testMethod.isPresent()) {
MyAnnotation annotation = testMethod.get().getAnnotation(MyAnnotation.class);
//snip...
}

根据javadoc,该方法返回

"an包含方法的可选;绝不为空,但可能为空

我觉得这有点令人困惑。在什么情况下测试方法会丢失?

假设我有这个扩展名:

import org.junit.jupiter.api.extension.*;
import java.lang.reflect.Method;
import java.util.Optional;
public class MyExtension implements BeforeAllCallback, BeforeEachCallback {
@Override
public void beforeAll(ExtensionContext context) throws Exception {
Optional<Method> testMethod = context.getTestMethod();
}
@Override
public void beforeEach(ExtensionContext context) {
Optional<Method> testMethod = context.getTestMethod();
}
}

和这个测试类:

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@ExtendWith(MyExtension.class)
class MyTest {
@Test
void test1() {
}
@Test
void test2() {
}
}

执行MyExtension.beforeAll()时,context.getTestMethod()应该返回哪个测试方法?MyExtension.beforeAll()不是特定于测试的,因此在beforeAll()中对context.getTestMethod()的调用不能返回测试方法!

MyExtension.beforeEach()中情况不同:该方法在每个特定测试之前被调用(即在test1()执行之前一次,在test2()执行之前一次),并且在beforeEach()方法中,对context.getTestMethod()的调用返回一个带有相应方法对象的可选对象。

相关内容

  • 没有找到相关文章

最新更新