JUnit 5:在什么情况下 ExtensionContext.getTestMethod() 不可用?
JUnit 5: under what conditions is ExtensionContext.getTestMethod() not available?
我正在开发 JUnit 5 扩展,我在其中使用 ExtensionContext.getTestMethod() 从测试方法中提取注释。
Optional<Method> testMethod = context.getTestMethod();
if (testMethod.isPresent()) {
MyAnnotation annotation = testMethod.get().getAnnotation(MyAnnotation.class);
//snip...
}
根据 javadoc,方法 returns
"an Optional containing the method; never null but potentially empty"
我发现这有点令人困惑。什么情况下会缺少测试方法?
假设我有这个扩展:
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();
}
}
和这个测试 class:
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()
return哪个测试方法? MyExtension.beforeAll()
不是 test-specific,因此在 beforeAll()
内对 context.getTestMethod()
的调用不能 return 测试方法!
MyExtension.beforeEach()
中的情况不同:此方法在每个特定测试之前调用(即在执行 test1()
之前调用一次,在执行 test2()
之前调用一次)并且正确地与beforeEach()
方法对 context.getTestMethod()
的调用 return 是一个带有相应方法对象的可选对象。
我正在开发 JUnit 5 扩展,我在其中使用 ExtensionContext.getTestMethod() 从测试方法中提取注释。
Optional<Method> testMethod = context.getTestMethod();
if (testMethod.isPresent()) {
MyAnnotation annotation = testMethod.get().getAnnotation(MyAnnotation.class);
//snip...
}
根据 javadoc,方法 returns
"an Optional containing the method; never null but potentially empty"
我发现这有点令人困惑。什么情况下会缺少测试方法?
假设我有这个扩展:
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();
}
}
和这个测试 class:
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()
return哪个测试方法? MyExtension.beforeAll()
不是 test-specific,因此在 beforeAll()
内对 context.getTestMethod()
的调用不能 return 测试方法!
MyExtension.beforeEach()
中的情况不同:此方法在每个特定测试之前调用(即在执行 test1()
之前调用一次,在执行 test2()
之前调用一次)并且正确地与beforeEach()
方法对 context.getTestMethod()
的调用 return 是一个带有相应方法对象的可选对象。