Передайте аргументы командной строки в тестовый пример JUnit, запускаемый программно - PullRequest
40 голосов
/ 21 мая 2010

Я пытаюсь запустить тест JUnit из класса Java с:

    JUnitCore core = new JUnitCore();
    core.addListener(new RunListener());
    core.run(classToRun);

Проблема в том, что мой тест JUnit требует подключения к базе данных, которое в настоящее время жестко задано в самом тесте JUnit.

Я ищу способ запуска теста JUnit программно (см. Выше), но передаю ему соединение с базой данных, которое я создаю в своем классе Java, который выполняет тест, а не жестко закодировано в классе JUnit.

По сути, что-то вроде

    JUnitCore core = new JUnitCore();
    core.addListener(new RunListener());
    core.addParameters(java.sql.Connection);
    core.run(classToRun);

Тогда в классе ClassRoRun:

@Test
Public void Test1(Connection dbConnection){
    Statement st = dbConnection.createStatement();
    ResultSet rs = st.executeQuery("select total from dual");
    rs.next();
    String myTotal = rs.getString("TOTAL");
    //btw my tests are selenium testcases:)
    selenium.isTextPresent(myTotal);
}

Я знаю о @Parameters, но здесь это не применимо, так как больше подходит для запуска того же самоготестовый случай несколько раз с разными значениями.Я хочу, чтобы все мои тестовые наборы передавали соединение с базой данных, которое я передаю через файл конфигурации, моему java-клиенту, который затем запускает эти тестовые наборы (также переданные через файл конфигурации).

Возможно ли это?

PS Я понимаю, это кажется странным способом ведения дел.

1 Ответ

45 голосов
/ 21 мая 2010

Вы можете использовать свойства системы Java для достижения этой цели.

Просто передайте то, что вам нужно, с помощью -Dconnectionstring=foobar в командной строке junit или используйте API Java для системных свойств, чтобы установить это программно, с помощью System.setProperty(String name, String value) и System.getProperty(String name).

В своих тестах вы можете использовать @Before или @BeforeClass для настройки общих объектов на основе этого свойства, в зависимости от того, хотите ли вы запустить установку один раз для каждого теста (в этом случае вы можете использовать члены класса ) или один раз для каждого набора (а затем используйте статические члены).

Вы даже можете факторизовать это поведение, используя абстрактный класс, который расширяет все ваши тестовые примеры.

...