当前位置: 首页 > 知识库问答 >
问题:

Spring Boot集成测试无法获取默认配置文件,并且在命令行未指定配置文件时引发错误

祁辰阳
2023-03-14

我正在尝试基于springboot配置文件运行基于Selenium的测试。我已经在我的pom中设置了默认配置文件,但是测试没有发现这一点。

不确定我是否错过了任何配置。

命令(用于执行测试):

  • mvn test-Dspring.profiles.active=google-WORKS FINE
  • mvn test-Dspring.profiles.active=saucelabs-WORKS FINE
  • mvn test-ERROR(如下所示)

错误

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'base.url' in value "${base.url}"
        at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:172) ~[spring-core-5.0.10.RELEASE.jar:5.0.10.RELEASE]
        at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:124) ~[spring-core-5.0.10.RELEASE.jar:5.0.10.RELEASE]
        at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:237) ~[spring-core-5.0.10.RELEASE.jar:5.0.10.RELEASE]
        at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:211) ~[spring-core-5.0.10.RELEASE.jar:5.0.10.RELEASE]
        at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:175) ~[spring-context-5.0.10.RELEASE.jar:5.0.10.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:839) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1083) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1062) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:581) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
        at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:370) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
        ... 31 common frames omitted

[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 9.868 s <<< FAILURE! - in com.example.demo.HomePageTest
[ERROR] loadHomePage(com.example.demo.HomePageTest)  Time elapsed: 0.001 s  <<< ERROR!
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.example.demo.HomePageTest': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'base.url' in v
alue "${base.url}"
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'base.url' in value "${base.url}"

2019-04-05 12:40:55.541  INFO 15512 --- [       Thread-2] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@66ea810: startup date [Fri Apr 05 12:40:44 EDT 2019]; root of context hierarchy
[INFO]
[INFO] Results:
[INFO]
[ERROR] Errors: 
[ERROR]   HomePageTest.loadHomePage » BeanCreation Error creating bean with name 'com.ex...

波姆。xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>springboot-profile-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-profile-demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.seleniumhq.selenium</groupId>
                    <artifactId>selenium-chrome-driver</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-chrome-driver</artifactId>
            <version>2.45.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>google</id>
            <properties>
                <activatedProperties>google</activatedProperties>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>uat</id>
            <properties>
                <activatedProperties>saucelabs</activatedProperties>
            </properties>
        </profile>
    </profiles>

</project>

src/test/resources/application。性质

spring.profiles.active=@activatedProperties@

src/test/resources/applicationgoogle。性质

base.url=https://www.google.com

src/测试/资源/application-saucelabs.properties

base.url=https://www.saucelabs.com

主页测试。JAVA

@RunWith(SpringRunner.class)
@SpringBootTest
public class HomePageTest {

    private static final String CHROME_DRIVER_EXE = "chromedriver.exe";
    private static WebDriver browser;
    @Value("${base.url}")
    private String baseUrl;

    @BeforeClass
    public static void init() {
        //load driver
        String filePath = ClassLoader.getSystemClassLoader().getResource(CHROME_DRIVER_EXE).getFile();
        System.setProperty("webdriver.chrome.driver", filePath);
        //init driver
        ChromeOptions options = new ChromeOptions();
        options.setExperimentalOption("useAutomationExtension", false);
        browser = new ChromeDriver(options);
    }

    @Test
    public void loadHomePage() {
        browser.get(baseUrl);
        assertNotNull(browser.getPageSource());
    }

    @AfterClass
    public static void tearDown() {
        if (browser != null) {
            browser.close();
            browser.quit();
        }
    }

}

共有2个答案

华宏逸
2023-03-14

您需要启用资源筛选

<build>
    <resources>
        <resource>
            <directory>src/test/resources/</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
锺离卓
2023-03-14

如果未指定任何配置文件,Spring将激活默认配置文件。对于默认配置文件,它扫描application.properties文件中的配置值。所以,你需要做到以下几点:

  • 创建应用程序。属性文件
  • 添加base。网址=

在那之后,它应该工作正常。

 类似资料:
  • 问题内容: Spring-boot利用了Spring配置文件(http://docs.spring.io/spring- boot/docs/current/reference/html/boot-features- profiles.html ),这些配置文件例如允许针对不同的环境进行单独的配置。我使用此功能的一种方法是配置要由集成测试使用的测试数据库。但是我想知道是否有必要创建自己的配置文件“

  • spring-引导利用spring配置文件(http://docs.Spring.io/Spring-boot/docs/current/reference/html/boot-features-profiles.html),例如,它允许为不同环境提供单独配置。我使用这个特性的一种方法是配置测试数据库以供集成测试使用。然而,我想知道是否有必要创建我自己的配置文件'test',并在每个测试文件中显式

  • 问题内容: 我正在通过映射配置文件配置Hibernate。 如何设置为可为空,默认为null? 问题答案:

  • 主要内容:默认配置文件,示例通常情况下,Spring Boot 在启动时会将 resources 目录下的 application.properties 或 apllication.yml 作为其默认配置文件,我们可以在该配置文件中对项目进行配置,但这并不意味着 Spring Boot 项目中只能存在一个 application.properties 或 application.yml。 默认配置文件 Spring Boot

  • 这是我的配置文件: 日志配置文件读起来非常清楚,因为它使用my/log目录中定义的模式正确地写入。 这是我在代码中实例化它的方式:

  • 我们在spring boot应用程序中有多个测试类。有些类包含集成测试,有些包含单元测试。这意味着如果我(例如使用maven)让所有测试执行,它将运行所有类中的所有测试。 我希望实现的是,只有在设置了特定的spring概要文件(例如通过application.yml)时,才执行集成测试。例如,我喜欢注释整个测试类,以定义只有在设置了指定的spring概要文件时才执行该类中的测试。如果未设置,则忽略

  • 我在许多网站上看到了错误,但配置页面与intellij的当前页面不同。 我需要修改什么才能修复它? 这是我的intellij信息: IntelliJ IDEA 2020.3.2(旗舰版)构建#IU-203.7148.57,构建于2021 1月26日运行时版本:11.0.9.1 11-b1145.77 amd64 VM:OpenJDK 64位服务器VM由JetBrains s.r.o.Windows

  • 我刚刚将我们的Spring Boot项目从引导升级到v2.6.2,从Spring Cloud升级到2021.0.0。 现在,我的远程配置获取没有任何效果,应用程序也无法获取正确的属性文件 [main]INFO o. s. c. c. c. ConfigServiceProperty tySourceLocator-从服务器获取配置:http://localhost:8080 [main]WARN