2

当我尝试执行时,我只在一个平台上遇到问题mvn clean install。作为构建的一部分,我们编译多个组件,最后我们使用wiremock执行功能测试。它应该从功能测试配置文件中选择特定配置,并且应该从 application.properties 文件中选择默认属性。但由于某种原因,相同的代码无法找到这些文件中提到的属性。所以,只是想知道是否可以通过某种方式获取在 wiremock 期间加载的属性文件列表?这将为为什么没有选择预期的属性文件提供一些线索?

所有属性文件都位于内部:

src/main/resources

并且,从测试课开始。

@ContextConfiguration(classes = SampleFTConfiguration.class)
public class SampleControllerTest{
//test method
}

@ComponentScan("com.xxx.xxx.xxx.ft")
@PropertySource("classpath:application-test.properties")
public class  SampleFTConfiguration{


}

注意:我不希望任何人解决这个问题,我只想知道,如果我们可以获得加载的属性文件的名称?

4

2 回答 2

2

经过一段时间的搜索和尝试,看起来ConfigurableEnvironment就是您要查找的内容。

代码非常简单。但是我认为最好直接调试和检查configurableEnvironment值,这样您就可以根据需要调整代码(删除过滤器名称等)。

  @Autowired
  private ConfigurableEnvironment configurableEnvironment;

  @Test
  public void getProperties() {
    Map<String, Object> mapOfProperties = configurableEnvironment.getPropertySources()
        .stream()
        .filter(propertySource -> propertySource.getName()
            .contains("application-test.properties"))
        .collect(Collectors.toMap(PropertySource::getName, PropertySource::getSource));
    mapOfProperties.values()
        .forEach(System.out::println);
  }

代码将打印出来

{properties-one=value-for-properties-one,properties-two=value-for-properties-two}

用我的 application-test.properties 值

properties-one=value-for-properties-one
properties-two=value-for-properties-two

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/env/ConfigurableEnvironment.html

于 2021-03-26T06:19:16.377 回答
1

好的,按照测试定义,请确保:

  1. 您应该使用 spring runner 运行测试(如果您在 JUnit5 上,则使用 spring 扩展)。所以你应该放置注释@RunWith(SpringRunner.class)(或@ExtendsWith(SpringExtension.class)用于junit 5)

  2. 您正在使用的属性源是application-test.properties. 您已经说过属性文件位于,src/main/resources但文件名可能暗示它应该驻留在src/test/resources

于 2021-03-22T06:54:18.070 回答