Spring транзакционный параметризованный тест и автопроводное соединение

Существует ли способ получить класс, который расширяет 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
    }
}
9
задан Walery Strauch 20 April 2016 в 09:53
поделиться

3 ответа

5
ответ дан 4 December 2019 в 20:22
поделиться

Нет, вы не можете. У суперкласса есть:

@RunWith(SpringJUnit4ClassRunner.class)

который гарантирует, что тесты выполняются в контексте Spring. Если вы замените его, вы потеряете это.

Что приходит мне в голову в качестве альтернативы, так это расширить SpringJunit4ClassRunner, предоставить там вашу пользовательскую функциональность и использовать ее с @RunWith(...). Таким образом, у вас будет контекст Spring + ваша дополнительная функциональность. Он вызовет super.createTest(...) и затем выполнит дополнительные действия над тестом.

1
ответ дан 4 December 2019 в 20:22
поделиться

Вы можете использовать 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

4
ответ дан 4 December 2019 в 20:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: