Как выполнить @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 в этом случае.
Если вы приведете более конкретный пример того, что вы пытаетесь протестировать, то я могу дать вам некоторый код о том, как его протестировать.