java - 如何给接口提供@After @Before注释
问题描述
我正在设置测试,我需要为每个测试执行操作。我不想在当前的抽象类中实现它并想使用接口。我看到我们可以设置一个默认方法。但它不能正常工作。
我尝试在抽象类中创建@Before
和@After
方法,并从我实现的接口调用默认方法。这是有效的。但是当我直接在界面中使用@Before
and@After
时,它不起作用。
有人可以告诉我我做错了什么吗?
这是我的测试:
public class myTestClass extends AbstractTest {
@Test
public void myTest1 {
System.out.println("Test List: " + myList.size());
// ...
}
}
我的抽象类是我调用了一些方法并实现了接口:
public abstract class AbstractTest implements InterfaceTest {
// ...
}
这是我的界面,我想在方法之前和之后调用:
public interface InterfaceTest {
List<String> myList = new ArrayList<>();
@Before
default void before() {
System.out.println("TEST INIT Before");
myList.addAll(Arrays.asList("test1", "test2"));
}
@After
default void after() {
System.out.println("TEST INIT After");
myList.clear();
}
}
我希望有:
TEST INIT Before
Test List: 2
TEST INIT After
但我的实际结果是:
Test List: 0
感谢您阅读
解决方案
如果您查看MethodSorter.getDeclaredMethods
,您可以看到它获取clazz.getDeclaredMethods()
不返回合成方法的方法列表。
所以答案是:不可能@Before
在接口方法上使用。
推荐阅读
- javascript - 当ANTD select组件中有datePicker被选中时,如何让这个datePicker可编辑
- r - 在欧洲防风草模型上使用 VIP 包计算重要性度量
- google-chrome-extension - 同时针对 Google Chrome 和 Edge Chromium 时,我应该何时启动本机消息主机?
- python - 在 C 中使用函数时将参数传递给 scipy.LowLevelCallable
- c++ - 如何覆盖具有不同返回类型的虚拟方法?
- react-native - React-navigation v5:将函数作为参数传递给 headerRight 按钮
- c++ - 带有实现和头文件的 Makefile
- sql - Excel 是否类似于 SQL“除外”?
- c++ - 字符串数组中最长公共子字符串运行时问题
- javascript - 如何将修改后的道具发送到 redux 商店?