Как выполнить @BeforeMethod другого класса в случае нескольких тестовых классов

Постановка задачи: у меня есть несколько классов testng, которые имеют методы @BeforeMethod & @Test, и некоторые тесты вызываются другим методом. Методы BeforeMethod в таком случае не выполняются.

Например,

public class A {

    @BeforeMethod
    public void preCheck(){
         System.out.println("Pre-Check A");
    }

    @Test
    public void check(){
         System.out.println("Check A");
         B objB = new B();
         objB.check();
    }
}

public class B {

    @BeforeMethod
    public void preCheck(){
        System.out.println("Pre-Check B");
    }

    @Test
    public void check(){
        System.out.println("Check B");
    }
}

Когда я выполняю класс A как класс Testng, я получаю следующий вывод

Pre-Check A
Check A
Check B

В то время как желаемый результат

Pre-Check A
Check A
Pre-Check B
Check B

Как я могу добиться того же?

1 ответ

Причина, по которой вы столкнулись с этой проблемой, заключается в том, что фреймворки модульного тестирования не предназначены для такой работы. Это не очень хорошая практика, когда речь идет о модульном тестировании, поскольку вы тестируете несколько модулей одновременно. Вы должны изолировать устройство, в котором вы пытаетесь проверить. В этом тесте настройте все ваши предварительные условия в вашем методе, аннотированном @BeforeMethod.

Если вы должны иметь их в одном тесте, потому что они так тесно связаны, то создайте один модульный тест, который создает оба экземпляра, и тестируйте их таким образом в одном тесте. Лучшим подходом было бы смоделировать B в вашем тесте A, чтобы вы могли указать, какие выходы B будут выдавать, и протестировать функциональность A в этом случае.

Если вы приведете более конкретный пример того, что вы пытаетесь протестировать, то я могу дать вам некоторый код о том, как его протестировать.

Другие вопросы по тегам