首页 > 解决方案 > 如何给接口提供@After @Before注释

问题描述

我正在设置测试,我需要为每个测试执行操作。我不想在当前的抽象类中实现它并想使用接口。我看到我们可以设置一个默认方法。但它不能正常工作。

我尝试在抽象类中创建@Before@After方法,并从我实现的接口调用默认方法。这是有效的。但是当我直接在界面中使用@Beforeand@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

感谢您阅读

标签: javatestingannotations

解决方案


如果您查看MethodSorter.getDeclaredMethods,您可以看到它获取clazz.getDeclaredMethods()不返回合成方法的方法列表。

所以答案是:不可能@Before在接口方法上使用。


推荐阅读