在 Java Azure 函数应用程序单元测试中加载 local.settings.json 属性的正确方法是什么?
What is the proper way to load local.settings.json properties in a Java Azure function app unit test?
在 Java Azure 函数应用程序单元测试中加载 local.settings.json
属性的正确方法是什么?
当我 运行 单元测试时,测试不会自动获取设置文件配置,就像我直接 运行 函数应用程序时那样。
我是这样做的,但我担心这是一个黑客?我找不到有关如何执行此操作的文档。据我所知,Java SDK 中已有一个 class 已经知道如何处理这个?
public class ConfigurationClientProvider {
private static final String CONNECTION_STRING = "APP_CONFIGURATION_CONNECTION_STRING";
private static final String LOCAL_SETTINGS_FILE = "local.settings.json";
public ConfigurationClient createConfigurationClient() {
return new ConfigurationClientBuilder()
.connectionString(getConnectionString())
.buildClient();
}
public String getConnectionString() {
Optional<String> optionalConnectionString = Optional.ofNullable(System.getenv(CONNECTION_STRING));
return optionalConnectionString.orElse(readPropertyFromLocalConfig(CONNECTION_STRING, "Values"));
}
public String readPropertyFromLocalConfig(String propertyName, String parentKey) {
try (FileInputStream fis = new FileInputStream("local.settings.json")) {
String data = IOUtils.toString(fis, "UTF-8");
try {
JSONObject jsonObject = new JSONObject(data);
return (String)((JSONObject)jsonObject.get(parentKey)).get(propertyName);
} catch (JSONException err){
log.error("Error reading file: " + LOCAL_SETTINGS_FILE, err.toString());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return StringUtil.EMPTY_STRING;
}
}
下面是我如何实现 readPropertyFromLocalConfig
方法:
@Slf4j
public class ConfigurationClientProvider {
private static final String CONNECTION_STRING = "APP_CONFIGURATION_CONNECTION_STRING";
private static final String LOCAL_SETTINGS_FILE = "local.settings.json";
private static final String ENV_SETTINGS_KEY = "Values";
private static final String ENCODING = "UTF-8";
public ConfigurationClient createConfigurationClient() {
return new ConfigurationClientBuilder()
.connectionString(getConnectionString())
.buildClient();
}
public String getConnectionString() {
return getProperty(CONNECTION_STRING, ENV_SETTINGS_KEY);
}
public String getProperty(String propertyName, String parentKey) {
Optional<String> optionalParentKey = Optional.ofNullable(parentKey);
Optional<String> optionalConnectionString = Optional.ofNullable(System.getenv(propertyName));
return optionalConnectionString.orElse(readPropertyFromLocalConfig(propertyName, optionalParentKey.orElse(ENV_SETTINGS_KEY)));
}
public String getProperty(String propertyName) {
Optional<String> optionalConnectionString = Optional.ofNullable(System.getenv(propertyName));
return optionalConnectionString.orElse(readPropertyFromLocalConfig(propertyName, ENV_SETTINGS_KEY));
}
public String readPropertyFromLocalConfig(String propertyName, String parentKey) {
try (FileInputStream fis = new FileInputStream(LOCAL_SETTINGS_FILE)) {
String data = IOUtils.toString(fis, ENCODING);
try {
JSONObject jsonObject = new JSONObject(data);
return (String)((JSONObject)jsonObject.get(parentKey)).get(propertyName);
} catch (JSONException err){
log.error("Error reading file: " + LOCAL_SETTINGS_FILE, err.toString());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return StringUtil.EMPTY_STRING;
}
}
如果您想在本地环境中读取 local.settings.json
文件以进行测试,您可以使用以下内容
//create a JSON parser and Read the file using FileReader
JSONParser jsonparser = new JSONParser();
FileReader localSettingsReader = new FileReader(".\local.settings.json");
//parse the Read values into object convert the object into Jsonobject
Object obj = jsonparser.parse(localSettingsReader);
JSONObject localsettingsobject = (JSONObject)obj;
String value = (String) localsettingsobj.get("YourAppSettingKeyValue");
无论如何,您已经使用相同的方式加载和读取 local.settings.json
文件 AppSettings 值。
但是如果你想在 Azure 中部署应用程序时检查你的应用程序设置值,你必须遵循以下步骤(用于本地和 Azure)。使用 System.getenv("YourAppSettingKeyValue") 查看应用设置值。
public class Function {
public String getAppSettingsValue(@HttpTrigger(name = "req", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) String req, ExecutionContext context) {
context.getLogger().info("My app setting value: "+ System.getenv("YourAppSettingKeyValue"));
return String.format(req);
}
}
参考here
在 Java Azure 函数应用程序单元测试中加载 local.settings.json
属性的正确方法是什么?
当我 运行 单元测试时,测试不会自动获取设置文件配置,就像我直接 运行 函数应用程序时那样。
我是这样做的,但我担心这是一个黑客?我找不到有关如何执行此操作的文档。据我所知,Java SDK 中已有一个 class 已经知道如何处理这个?
public class ConfigurationClientProvider {
private static final String CONNECTION_STRING = "APP_CONFIGURATION_CONNECTION_STRING";
private static final String LOCAL_SETTINGS_FILE = "local.settings.json";
public ConfigurationClient createConfigurationClient() {
return new ConfigurationClientBuilder()
.connectionString(getConnectionString())
.buildClient();
}
public String getConnectionString() {
Optional<String> optionalConnectionString = Optional.ofNullable(System.getenv(CONNECTION_STRING));
return optionalConnectionString.orElse(readPropertyFromLocalConfig(CONNECTION_STRING, "Values"));
}
public String readPropertyFromLocalConfig(String propertyName, String parentKey) {
try (FileInputStream fis = new FileInputStream("local.settings.json")) {
String data = IOUtils.toString(fis, "UTF-8");
try {
JSONObject jsonObject = new JSONObject(data);
return (String)((JSONObject)jsonObject.get(parentKey)).get(propertyName);
} catch (JSONException err){
log.error("Error reading file: " + LOCAL_SETTINGS_FILE, err.toString());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return StringUtil.EMPTY_STRING;
}
}
下面是我如何实现 readPropertyFromLocalConfig
方法:
@Slf4j
public class ConfigurationClientProvider {
private static final String CONNECTION_STRING = "APP_CONFIGURATION_CONNECTION_STRING";
private static final String LOCAL_SETTINGS_FILE = "local.settings.json";
private static final String ENV_SETTINGS_KEY = "Values";
private static final String ENCODING = "UTF-8";
public ConfigurationClient createConfigurationClient() {
return new ConfigurationClientBuilder()
.connectionString(getConnectionString())
.buildClient();
}
public String getConnectionString() {
return getProperty(CONNECTION_STRING, ENV_SETTINGS_KEY);
}
public String getProperty(String propertyName, String parentKey) {
Optional<String> optionalParentKey = Optional.ofNullable(parentKey);
Optional<String> optionalConnectionString = Optional.ofNullable(System.getenv(propertyName));
return optionalConnectionString.orElse(readPropertyFromLocalConfig(propertyName, optionalParentKey.orElse(ENV_SETTINGS_KEY)));
}
public String getProperty(String propertyName) {
Optional<String> optionalConnectionString = Optional.ofNullable(System.getenv(propertyName));
return optionalConnectionString.orElse(readPropertyFromLocalConfig(propertyName, ENV_SETTINGS_KEY));
}
public String readPropertyFromLocalConfig(String propertyName, String parentKey) {
try (FileInputStream fis = new FileInputStream(LOCAL_SETTINGS_FILE)) {
String data = IOUtils.toString(fis, ENCODING);
try {
JSONObject jsonObject = new JSONObject(data);
return (String)((JSONObject)jsonObject.get(parentKey)).get(propertyName);
} catch (JSONException err){
log.error("Error reading file: " + LOCAL_SETTINGS_FILE, err.toString());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return StringUtil.EMPTY_STRING;
}
}
如果您想在本地环境中读取 local.settings.json
文件以进行测试,您可以使用以下内容
//create a JSON parser and Read the file using FileReader
JSONParser jsonparser = new JSONParser();
FileReader localSettingsReader = new FileReader(".\local.settings.json");
//parse the Read values into object convert the object into Jsonobject
Object obj = jsonparser.parse(localSettingsReader);
JSONObject localsettingsobject = (JSONObject)obj;
String value = (String) localsettingsobj.get("YourAppSettingKeyValue");
无论如何,您已经使用相同的方式加载和读取 local.settings.json
文件 AppSettings 值。
但是如果你想在 Azure 中部署应用程序时检查你的应用程序设置值,你必须遵循以下步骤(用于本地和 Azure)。使用 System.getenv("YourAppSettingKeyValue") 查看应用设置值。
public class Function {
public String getAppSettingsValue(@HttpTrigger(name = "req", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) String req, ExecutionContext context) {
context.getLogger().info("My app setting value: "+ System.getenv("YourAppSettingKeyValue"));
return String.format(req);
}
}
参考here