Spring и TestNG хорошо работают вместе, но есть некоторые вещи, о которых нужно знать. Помимо создания подклассов AbstractTestNGSpringContextTests, вы должны знать, как он взаимодействует со стандартными аннотациями установки / разрыва TestNG.
TestNG имеет четыре уровня настройки
- BeforeSuite
- BeforeTest
- BeforeClass
- BeforeMethod
, которые происходят именно так, как вы ожидаете (отличный пример самодокументируемых API). Все они имеют необязательное значение, называемое «depenno_nMethods», которое может принимать String или String [], которые являются именами или именами методов одного уровня.
Класс AbstractTestNGSpringContextTests имеет аннотированный метод BeforeClass с именем springTestContextPrepareTestInstance, от которого необходимо установить метод установки, если в нем используется класс с автопроводкой. Что касается методов, вам не нужно беспокоиться об автопроводке, поскольку это происходит, когда тестовый класс настроен в этом до метода класса.
Это просто оставляет вопрос о том, как вы можете использовать класс с автопроводкой в методе, аннотированном с помощью BeforeSuite. Вы можете сделать это, вручную вызвав springTestContextPrepareTestInstance - хотя он по умолчанию не настроен для этого, я несколько раз делал это успешно.
Итак, чтобы проиллюстрировать, модифицированная версия примера Arup:
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.annotations.Test;
@Test
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class TestValidation extends AbstractTestNGSpringContextTests {
@Autowired
private IAutowiredService autowiredService;
@BeforeClass(dependsOnMethods={"springTestContextPrepareTestInstance"})
public void setupParamValidation(){
// Test class setup code with autowired classes goes here
}
@Test
public void testNullParamValidation() {
// Testing code goes here!
}
}