Подтвердить что ты не робот

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

Я пытаюсь запустить JUnit Test из 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);

Затем в классеToRun:

@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. Я понимаю, что это кажется странным способом делать вещи.

4b9b3361

Ответ 1

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

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

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

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