Как дать аннотацию @After @Before интерфейсу - PullRequest
0 голосов
/ 03 мая 2019

Я настраиваю тесты, и для каждого из них мне нужно выполнять действия.Я не хочу реализовывать его в текущем абстрактном классе и хочу использовать интерфейс.Я вижу, мы можем установить метод по умолчанию.Но он не работает должным образом.

Я пытаюсь создать метод @Before и @After в абстрактном классе и вызываю метод по умолчанию из интерфейса, который я реализовал.И это работает.Но когда я напрямую, но @Before и @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

Спасибо, что прочитали

1 Ответ

0 голосов
/ 03 мая 2019

Если вы посмотрите на MethodSorter.getDeclaredMethods, вы увидите, что он получает список методов по clazz.getDeclaredMethods(), который не возвращает синтетические методы.

Поэтому ответ таков: невозможно использовать @Before в интерфейсеметоды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...