Как я могу использовать Параметризованный исполнитель тестов JUnit с полем, это ввело Spring использования?

Я использую Spring для введения пути к каталогу в мои модульные тесты. В этом каталоге много файлов, которые должны использоваться для генерации данных тестирования для параметризованных тестовых сценариев с помощью Параметризованного исполнителя тестов. К сожалению, исполнитель тестов требует, что метод, который обеспечивает параметры быть статичным. Это не работает на мою ситуацию, потому что каталог может только быть введен в нестатическое поле. Какие-либо идеи, как я могу обойти это?

19
задан Edward Dale 4 August 2010 в 12:22
поделиться

3 ответа

Я предполагаю, что вы используете JUnit 4.X, поскольку вы упомянули Parameterized test runner. Это подразумевает, что вы не используете @RunWith(SpringJUnit4ClassRunner). Это не проблема, просто перечисляю свои предположения.

Следующий пример использует Spring для получения каталога тестовых файлов из XML-файла. Он не инжектирует его, но данные все равно доступны вашему тесту. Причем в статическом методе, не меньше.

Единственный недостаток, который я вижу, это то, что это может означать, что ваша конфигурация Spring будет разбираться/конфигурироваться несколько раз. При необходимости вы можете загрузить только меньший файл с информацией для конкретного теста.

@RunWith(Parameterized.class)
public class MyTest {
    @Parameters
    public static Collection<Object[]> data() {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("/jeanne/jeanne.xml");
        String dir = ctx.getBean("testFilesDirectory", String.class);

            // write java code to link files in test directory to the array
        return Arrays.asList(new Object[][] { { 1 } });
    }
// rest of test class
}
7
ответ дан 30 November 2019 в 03:59
поделиться

Помните, что Spring вводит с помощью @Autowired, но также и с сеттером. Поэтому вместо использования @Autowired используйте установщик:

private static String directory;

public void setDirectory(String directory) {
    this.directory = directory;
}

public static String getDirectory() {
     return directory;
}
0
ответ дан 30 November 2019 в 03:59
поделиться

Вы можете использовать TestContextManager из Spring. В этом примере я использую теории вместо параметризованных.

@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);
  }
}

Я нашел это решение здесь: Как проводить параметризованные / теоретические тесты с помощью Spring

11
ответ дан 30 November 2019 в 03:59
поделиться
Другие вопросы по тегам:

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