У меня есть такой код в моем проекте:
public static final String LANGUAGE = Props.get("abc.language");
он использует это class Props
в библиотеке только для чтения:
public class Props {
private static Props instance;
private static Properties properties;
private Props() {
initProperties();
}
/**
* Get property from file
*/
public static String get(String prop) {
return getInstance().getProp(prop);
}
public static synchronized Props getInstance() {
if (instance == null) {
instance = new Props();
}
return instance;
}
// this method fails when the project starts from the main
private static void initProperties() {
String sConfigFile = System.getProperty("TagConfigFile", "config/application.properties");
properties = new Properties();
//streamFromResources gets null in the next line, if project was run from main
try (InputStream streamFromResources = Props.class.getClassLoader().getResourceAsStream(sConfigFile)) {
InputStreamReader isr = new InputStreamReader(streamFromResources, "UTF-8");
properties.load(isr);
} catch (IOException | NullPointerException e) {
throw new PropsRuntimeException("Failed to access properties file", e);
}
}
/**
* Returns the value of the property 'name' of empty string if the property is not found
*/
private String getProp(String name) {
String val = getProps().getProperty(name, "");
return val.trim();
}
}
Когда я запускаю проект из Cucumber. java, он успешно запускается.
Когда я пытаюсь запустить проект с помощью main, он завершается неудачей, поскольку streamFromResources
получает значение NULL в строке InputStream streamFromResources = Props.class.getClassLoader().getResourceAsStream(sConfigFile)
(метод initProperties()
). Моя трудность заключается в том, что я не могу изменить class Props
.
Ниже приведен код классов RunnerTest и Cucumber
мой класс RunnerTest:
public class RunnerTest {
private static String[] defaultOptions = {
"--glue", "ru.abc.stepDefs",
"--glue", "ru.abc.d.stepdefs",
"src/test/resources/"
};
public static void main(String[] args) throws Throwable {
Stream<String> cucumberOptions = Stream.concat(Stream.of(defaultOptions), Stream.of(args));
cucumber.api.cli.Main.main(cucumberOptions.toArray(String[]::new));
}
мой класс CucumberTest:
@RunWith(Cucumber.class)
@CucumberOptions(
monochrome = true,
glue = {"ru.abc.stepDefs", "ru.abc.d.stepdefs"},
features = {"src/test/resources/features/"},
tags = {"@TEST2"},
plugin = {"pretty", "html:target/cucumber-html-report"}
)
public class CucumberTest {}
Структура моего проекта:
abc
|
|---src
| |
| |---- main
| | |
| | |---- java
| | | |
| | | |---- SteDefinition.java
| | | | Page1.java
| | | | Models.java
| | | | RunnerTest.java
| | | | CucumberTest.java
| |
| |
| |---- test
| | |
| | resources
| | |
| | |---- config
| | | |
| | | |---- application.properties
| | |
| | |---- features
| | | |
| | | |---- smoke1.feature
| | | | smoke2.feature
| | |
| | |---- testdata
| | | |
| | | |---- objects
| | | | |
| | | | |---- defaultTestDataDEV.json