Можем ли мы пропустить java-метод @AfterClass в testng xml

У меня есть класс java testng с некоторым тестом, имеющим @BeforeClass и @AfterClass. Я использую xml для запуска этого класса testng. Некоторое время мне может потребоваться пропустить @AfterClass, который обычно имеет очистку тестовой площадки.

Как мы можем этого добиться, чтобы пропустить только @AfterClass


person Joshi    schedule 03.10.2019    source источник
comment
Почему у вас есть блок @AfterClass, который следует вызывать после завершения модульного теста, когда вы на самом деле не хотите, чтобы он там был? Если вы этого не хотите, разве вы не можете просто удалить его? Пожалуйста, подробно объясните, какой код тестирования и подготовки / очистки следует вызывать, а какой нет (и почему).   -  person Progman    schedule 03.10.2019
comment
В некоторых сценариях в моем случае я хочу пропустить последующий класс, который очищает данные на испытательном стенде. Поэтому вместо того, чтобы иметь отдельный класс без AfterClass, я хочу повторно использовать его, просто пропустив его.   -  person Joshi    schedule 03.10.2019
comment
Разве эти тесты не должны быть в классе без @AfterClass, который тогда не очистит тестовую площадку? Было бы сложно поддерживать тесты, когда @AfterClass, который должен быть вызван после завершения теста с классом, фактически не вызывается.   -  person Progman    schedule 03.10.2019


Ответы (4)


Вы можете попробовать использовать для этого слушатели TestNG. Например, у нас может быть следующий тестовый класс com.example.SampleTest:

public class SampleTest {

  @BeforeClass
  public void setUp() {
    System.out.println("Executing before class method.");
  }

  @Test
  public void test() {
    Assert.assertEquals(1, 1);
  }

  @AfterClass
  public void tearDown() {
    System.out.println("Executing after class method.");
  }
}

Чтобы отключить выполнение @AfterClass метода, вы можете создать слушателя com.example.AfterClassListener следующим образом:

public class AfterClassListener implements IAnnotationTransformer2 {

  @Override
  public void transform(IConfigurationAnnotation annotation, Class testClass,
      Constructor testConstructor, Method testMethod) {
    if (annotation.getAfterTestClass()){
      annotation.setEnabled(false);
    }
  }
}

После этого добавьте этого слушателя в свой testng.xml файл:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="test-suite" verbose="1" thread-count="3" parallel="none">
  <listeners>
    <listener class-name="com.example.AfterClassListener"/>
  </listeners>
  <test name="Login Test">
    <classes>
      <class name="com.example.SampleTest"/>
    </classes>
  </test>
</suite>

Когда вы захотите снова включить его, просто удалите этого слушателя из testng.xml

person bhusak    schedule 03.10.2019
comment
отлично, позволь мне попробовать это - person Joshi; 05.10.2019

Некоторые сценарии в моем случае я хочу пропустить афтеркласс

Так что поместите "несколько сценариев" в условный

@AfterClass
public void after()
{
    if (something)
    {
        //do stuff
    }
}
person Community    schedule 03.10.2019
comment
Большое спасибо, это можно сделать так, но нельзя ли сделать это в файле testng xml? - person Joshi; 03.10.2019

Если это предопределено заранее, то есть до того, как пакет начнет работать, вы знаете, хотите ли вы очистить или нет, вы можете управлять им с помощью параметров / свойств системы. Поместите параметр в свой XML-файл и измените значение true и false в зависимости от того, что вам нужно сделать. Вы даже можете прочитать его из системных переменных.

Ваш @AfterClass может проверить

if (toDeleteDb) -> clear -> else return (do nothing)

Если это во время выполнения, установите свойство и замените условие if этим свойством.

person niharika_neo    schedule 04.10.2019

@BeforeClass вызывается один раз перед началом всего теста, аналогично @AfterClass вызывается только один раз после выполнения всех тестов. Таким образом, добавление проверок сценариев в методе @AfterClass не имеет смысла, поскольку это последний метод, который будет выполняться в вашем классе junit, и программа завершается. Вы вообще хотите проверять определенные условия до / после каждого выполнения @Test, используйте @ Before / @ After

person rupaj    schedule 03.10.2019