Передавать аргументы командной строки для тестового примера 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. Я понимаю, что это кажется странным способом делать вещи.
Ответы
Ответ 1
Для достижения этой цели вы можете использовать свойства системы java.
Просто передайте то, что вам нужно с -Dconnectionstring=foobar
в командной строке junit, или используйте java api для системных свойств, чтобы установить это программно, с помощью System.setProperty(String name, String value)
и System.getProperty(String name)
.
В ваших тестах вы можете использовать @Before
или @BeforeClass
для настройки общих объектов на основе этого свойства, ожидая, хотите ли вы запускать установку один раз для каждого теста (в этом случае вы можете использовать классы ) или один раз для каждого пакета (а затем использовать статические элементы).
Вы даже можете разложить это поведение, используя абстрактный класс, который распространяется на все ваши тестовые примеры.