我试图从application.properties中获取一些配置,然后在单元测试中覆盖它。但是,单元测试始终将schemaPath属性设置为null
。
这就是我所拥有的:
Service
:
@Service
public class XmlValidator {
@Value("${schema.location}")
private String schemaPath;
public void validateXml(String fileName) {
String schemaPath = null;
if (fileName.contains("Reference")) {
schemaPath = schemaPath;
}
}
}
application.properties和application-test.properties:
schema.location = /schema/Schema_Reference_0.1.xsd
单元测试:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = XmlValidator.class)
@TestPropertySource(locations="classpath:config/application-test.properties")
public class XmlValidatorTest {
private XmlValidator validator = new XmlValidator();
@Test
public void testSchema() throws Exception {
validator.validateXml("resources/xmlFile.xml");
}
}
答案 0 :(得分:1)
您的问题似乎很容易修复,它可能与配置文件无关。检查以下行
private XmlValidator validator = new XmlValidator();
当你通过调用构造函数创建对象时,不要让Spring自动装入spring bean。它应该如下所示
@Autowired
private XmlValidator validator;
这将让Spring做到它的魔力并且你会得到一个注射的豆。
application-test.properties
仅在test
个人资料有效时才会被选中。
检查测试开始时在日志中打印的活动配置文件。它应该显示如下
The following profiles are active: test,dev,local
test, dev, local
是您的春季应用使用的配置文件。如果这些配置文件处于活动状态,则弹簧将拾取以下属性文件。
application-test.properties
application-dev.properties
application-local.properties
#Similarly *.yml files
#Following are unconditional
bootstrap.properties
application.properties
查看此文档
如果没有配置文件后缀,将此测试相关属性放在src/test/resources/application.properties
中可能会更容易。如果确实需要配置文件test
,则必须使用环境变量或使用以下属性修改application.properties
文件来激活它
spring.profiles.include=test
or
spring.profiles.active=test
答案 1 :(得分:0)
application.properties文件内容应为:
schema.location=/schema/Schema_Reference_0.1.xsd
因为你可以看到'='符号附近没有空格
可能是应用程序中使用的application.properties文件在文本上下文中不可见。你应该检查一下。