Ответ 1
Он также работает с TestNG. Для вашего тестового класса необходимо расширить один из следующих классов:
Spring поддерживать JUnit достаточно хорошо:
При аннотации RunWith
и ContextConfiguration
все выглядит очень интуитивно понятным
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:dao-context.xml")
Этот тест сможет правильно работать как в Eclipse, так и в Maven. Интересно, есть ли аналогичные материалы для TestNG. Я рассматриваю возможность перехода к этой платформе "следующего поколения", но я не нашел соответствия для тестирования с помощью Spring.
Он также работает с TestNG. Для вашего тестового класса необходимо расширить один из следующих классов:
Вот пример, который работал у меня:
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 {
public void testNullParamValidation() {
// Testing code goes here!
}
}
Spring и TestNG работают хорошо вместе, но есть некоторые вещи, о которых нужно знать. Помимо подкласса AbstractTestNGSpringContextTests, вам нужно знать, как он взаимодействует со стандартными аннотациями установки/удаления TESTNG.
TestNG имеет четыре уровня настройки
которые происходят точно так, как вы ожидали бы (отличный пример самодокументирующих API). Все они имеют необязательное значение, называемое "dependOnMethods", которое может принимать строку или строку [], которая является именем или именами методов на том же уровне.
В классе 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!
}
}