Существует ли способ получить класс, который расширяет AbstractTransactionalJUnit4SpringContexts для проигрывания приятно с собственным @RunWith JUNIT (Parameterized.class), так, чтобы поля, отмеченные как Автопроводные, были соединены проводом в правильно?
@RunWith(Parameterized.class)
public class Foo extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired private Bar bar
@Parameters public static Collection<Object[]> data() {
// return parameters, following pattern in
// http://junit.org/apidocs/org/junit/runners/Parameterized.html
}
@Test public void someTest(){
bar.baz() //NullPointerException
}
}
See http://jira.springframework.org/browse/SPR-5292 Есть решение.
Нет, вы не можете. У суперкласса есть:
@RunWith(SpringJUnit4ClassRunner.class)
который гарантирует, что тесты выполняются в контексте Spring. Если вы замените его, вы потеряете это.
Что приходит мне в голову в качестве альтернативы, так это расширить SpringJunit4ClassRunner
, предоставить там вашу пользовательскую функциональность и использовать ее с @RunWith(...)
. Таким образом, у вас будет контекст Spring + ваша дополнительная функциональность. Он вызовет super.createTest(...)
и затем выполнит дополнительные действия над тестом.
Вы можете использовать TestContextManager из Spring. В этом примере я использую Theories вместо Parameterized.
@RunWith(Theories.class)
@ContextConfiguration(locations = "classpath:/spring-context.xml")
public class SeleniumCase {
@DataPoints
public static WebDriver[] drivers() {
return new WebDriver[] { firefoxDriver, internetExplorerDriver };
}
private TestContextManager testContextManager;
@Autowired
SomethingDao dao;
private static FirefoxDriver firefoxDriver = new FirefoxDriver();
private static InternetExplorerDriver internetExplorerDriver = new InternetExplorerDriver();
@AfterClass
public static void tearDown() {
firefoxDriver.close();
internetExplorerDriver.close();
}
@Before
public void setUpStringContext() throws Exception {
testContextManager = new TestContextManager(getClass());
testContextManager.prepareTestInstance(this);
}
@Theory
public void testWork(WebDriver driver) {
assertNotNull(driver);
assertNotNull(dao);
}
}
Я нашел это решение здесь: How to do Parameterized/Theories tests with Spring