Передайте параметры командной строки тестовому сценарию JUnit, выполняемому программно

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

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

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

То, что я ищу, является способом запустить тест JUnit программно (выше), но передать соединение с базой данных ему, что я создаю в своем Классе Java, который запускает тест, и не hardcoded в классе JUnit.

В основном что-то как

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

Затем в classToRun:

@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, который затем работает, те тестовые сценарии (также передал в через конфигурационный файл).

Действительно ли это возможно?

P.S. Я понимаю, что это походит на нечетный способ сделать вещи.

40
задан Nick Vallely 21 May 2010 в 17:24
поделиться

1 ответ

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

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

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

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

45
ответ дан 27 November 2019 в 01:53
поделиться
Другие вопросы по тегам:

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