我可以在JAVA的属性文件中使用正则表达式吗?
我试图断言存储在属性文件中的某些文本:我可以在JAVA的属性文件中使用正则表达式吗?,java,regex,properties,Java,Regex,Properties,我试图断言存储在属性文件中的某些文本: Text=\ some text\n\ to be\n\ asserted\n\ based on 1567 ratings 1567有所不同,因此我想确保它被替换为正则表达式,正则表达式表示这可以是使用\d或\d的任何数字,因为我必须在属性文件中转义 所以我试着用 Text=\ some text\n\ to be\n\ asserted\n\ based on \\d ratings 这是我用来断言的方法: Assert.assertEquals(
Text=\
some text\n\
to be\n\
asserted\n\
based on 1567 ratings
1567有所不同,因此我想确保它被替换为正则表达式,正则表达式表示这可以是使用\d或\d的任何数字,因为我必须在属性文件中转义
所以我试着用
Text=\
some text\n\
to be\n\
asserted\n\
based on \\d ratings
这是我用来断言的方法:
Assert.assertEquals(PropertyLoader.loadProperty("filename.properties", "Text"),actual);
actual是一个WebElement,它提供网站中的文本,我使用actual.getText()
这是具有loadProperty方法的类
class PropertyLoader {
static String loadProperty(String file, String name) {
Properties props = new Properties();
try {
props.load(getResourceAsStream(file));
} catch (IOException e) {
e.printStackTrace();
}
return props.getProperty(name);
}
}
最终的结果是我得到了
比较失败:
Expected:
some text
to be
asserted
based on \d ratings
Actual:
some text
to be
asserted
based on 1567 ratings
不确定这是否可能,或者我只是遗漏了什么?首先,属性文件的内容应该是:
Text=\
some text\n\
to be\n\
asserted\n\
based on \\d+ ratings
那么您的测试用例将是:
Assert.assertTrue(
Pattern.compile(
PropertyLoader.loadProperty("filename.properties", "Text"),
Pattern.MULTILINE
).matcher(actual).matches()
);
没有什么可以阻止您在那里存储正则表达式字符串,但是
assertEquals
方法不会尝试匹配正则表达式-您必须使用不同的断言。您可能可以添加一些逻辑来将属性键标记为正则表达式值,并尝试将它们作为模式加载,然后调用assertTrue
等,在这种情况下尝试将模式与给定的字符串匹配。您可以使用类似assertTrue(testString.matches(regex))的内容。顺便说一句,\d不会剪切它,因为它只匹配一个数字。您必须使用\d+或\d{4}。。。