在Spring应用程序中使用application.properties

时间:2018-01-29 14:53:15

标签: java spring unit-testing

我试图从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");
    }
}

2 个答案:

答案 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

查看此文档

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-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文件在文本上下文中不可见。你应该检查一下。