Wiosna i T EstNG działa dobrze razem, ale są pewne rzeczy, o których należy pamiętać. Oprócz podklasowania AbstractTestNGSpringContextTests, musisz zdawać sobie sprawę z tego, w jaki sposób współdziała ze standardowymi adnotacjami konfiguracji/odkładania TestNG.
TestNG ma cztery poziomy ustawień
- BeforeSuite
- BeforeTest
- BeforeClass
- BeforeMethod
które występują dokładnie tak, jak można się spodziewać (świetny przykład samodokumentujące API). Wszystkie one mają opcjonalną wartość zwaną "dependOnMethods", która może przyjąć String lub String [], czyli nazwę lub nazwy metod na tym samym poziomie.
Klasa AbstractTestNGSpringContextTests ma metodę opisaną przez BeforeClass o nazwie springTestContextPrepareTestInstance, w której należy ustawić metodę instalacji, aby była zależna od tego, czy używa się w niej klasy autowyred. W przypadku metod nie musisz się martwić o autowiring, ponieważ występuje, gdy klasa testowa jest skonfigurowana w tym przed metody klasy.
To pozostawia pytanie, w jaki sposób można użyć klasy autowired w metodzie opisanej w BeforeSuite. Możesz to zrobić, ręcznie wywołując springTestContextPrepareTestInstance - chociaż nie jest to domyślnie ustawione, aby to zrobić, zrobiłem to kilka razy z powodzeniem.
Tak więc, aby zilustrować, zmodyfikowaną wersję przykład Arup za:
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!
}
}
Dzięki. Właśnie tego szukam. –
Co za bałagan. Po pierwsze wymusza określoną hierarchię klas. Po drugie jest dość mylące, ponieważ przypadek testowy, w którym używa się '@ Transactional', może przez pomyłkę wydłużyć wersję nietransakcyjną. Ale niestety nie ma innego sposobu na użycie Springa z TestNG. –
@GrzesiekD. Mam nadzieję, że coś się zmieniło za 4,5 roku. :) Proszę więc sprawdzić status quo. – lexicore