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

将spring应用程序变量引入集成测试

宰坚
2023-03-14
|____src
| |____test
| | |____resources
| | |____java
| | | |____org
| | | | |____example
| | | | | |____forex
| | | | | | |____controller
| | | | | | | |____CurrencyControllerTest.java
| | | | | | |____service
| | | | | | | |____CurrencyServiceTest.java
| |____integrationTest
| | |____resources
| | | |____application.yml
| | |____java
| | | |____org
| | | | |____example
| | | | | |____forex
| | | | | | |____integration
| | | | | | | |____ApiTests.java
| | | | | | |____domain
| | | | | | | |____CurrencyHelper.java
| |____main
| | |____resources
| | | |____application.yml
| | |____java
| | | |____org
| | | | |____example
| | | | | |____Application.java
| | | | | |____forex
| | | | | | |____repository
| | | | | | | |____CurrencyRepository.java
| | | | | | |____controller
| | | | | | | |____CurrencyController.java
| | | | | | |____service
| | | | | | | |____CurrencyService.java
| | | | | | |____domain
| | | | | | | |____Currency.java
base-urls:
  test-url: ${TEST_URL:http://localhost:8080}

设置是,我希望有一个正在运行的应用程序,然后使用@Value注释中的URL运行集成测试。我的测试类使用Rest Assured并如下所示:

public class ApiTests {

    @Value("${base-urls.test-url}")
    private String baseUrl;

    private Currency dummy;

    @Before
    public void setup() {
        RestAssured.baseURI = baseUrl;
        dummy = CurrencyHelper.dummy();
    }

我的build.gradle文件如下所示:

plugins {
    id 'java'
    id 'application'
    id 'io.spring.dependency-management' version '1.0.7.RELEASE'
    id 'org.springframework.boot' version '2.3.4.RELEASE'
}

apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'org.springframework.boot'

group 'org.example.forex'
version '1.0-SNAPSHOT'
sourceCompatibility = '1.8'
mainClassName = 'org.example.Application'

sourceSets {
    integrationTest {
        resources {
            srcDir 'src/integrationTest/resources'
        }
        compileClasspath += sourceSets.main.output + configurations.testRuntime
        runtimeClasspath += output + compileClasspath
    }
}

def versions = [
        postgresql         : '42.2.2'
]

repositories {
    mavenCentral()
}

dependencies {
    implementation "org.springframework.boot:spring-boot-starter"
    implementation "org.springframework.boot:spring-boot-starter-web"
    implementation'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation "org.postgresql:postgresql:${versions.postgresql}"

    testImplementation "org.springframework.boot:spring-boot-starter-test"
    testImplementation group: 'junit', name: 'junit', version: '4.12'

    integrationTestImplementation "org.springframework.boot:spring-boot-starter-test"
    integrationTestImplementation "org.springframework:spring-test"
    integrationTestImplementation 'io.rest-assured:rest-assured:3.3.0'
    integrationTestImplementation "com.fasterxml.jackson.core:jackson-databind:2.11.0"
    integrationTestImplementation 'junit:junit:4.12'
}

task integrationTest(type: Test) {
    description = 'Runs integration tests.'
    group = 'verification'

    testClassesDirs = sourceSets.integrationTest.output.classesDirs
    classpath = sourceSets.integrationTest.runtimeClasspath
}

共有1个答案

曹光霁
2023-03-14

我相信您正在寻找的是SpringBootTest注释。在测试类的顶部添加以下注释。

@RunWith(SpringRunner.class)
@SpringBootTest

如果需要,可以通过在SpringBootTest注释中包含附加属性,将它们传递到Spring环境中,如

@SpringBootTest(properties = "com.mycompany.myclass.someproperty=some_value")

如果您试图加载的属性位于特定于配置文件的属性文件中,则可以使用

@ActiveProfiles(value = "my_profile")
 类似资料:
  • 以下是我的场景。 我有我的应用程序,它构建在带有嵌入式tomcat服务器的Spring Boot上。在我的应用程序中,我有单元测试和集成测试。 首先,我想将我的应用程序构建为一个maven包(jar ),它将覆盖所有的单元测试,然后下一步是将jar文件作为spring boot application运行((java -jar myapplication.jar ),它将启动tomcat服务器。最

  • 看来我在pom.xml的当前设置中遗漏了一些东西。目前,我有一个使用启动程序配置的Spring Boot应用程序。 现在我要将这个应用程序与Spring Cloud brixton.m1集成。根据文档,我需要添加以下块: 线程“main”java.lang.nosuchmethoderror中出现异常:org.springframework.core.resolvabletype.forinsta

  • 让spring集成应用程序具有入站http网关和出站http网关,在我想要缓存的两个网关之间,以避免不必要的请求。我唯一的解决方案是在它之后添加带缓存的拦截器和路由器,将cahced结果路由回回复通道,而非缓存的路由回出站,但这个解决方案对我来说似乎很棘手和丑陋。当入站网关具有相同的请求和应答通道时,带缓存的拦截器也可以正常工作(当返回具有相同标头但不同负载的新消息时,它被视为应答),但我不能使用

  • 我第一次尝试Drools/Guvnor,我们计划在Guvnor中进行规则创作,编译、构建并将包下载到“规则包目录”。 现在我遇到的问题是,将Drools与我们的Java应用程序集成的最佳方式是什么?选项1)构建知识代理并开始将事实插入内存以在我们的应用程序中进行规则评估。在这种情况下,Drools引擎使用与应用程序JVM相同的JVM。选项2)拥有一个构建知识代理的Drools Server,应用程

  • 我们正在开发一个应用程序,将使用CPLEX解决一个工业问题。开发了一个数学模型(文件)。我们希望直接使用该模型,而不是使用CPLEX Java API重新转录。 在我们的架构中,我们有一个专门用于检索业务数据和创建合适的文件的应用程序。原始模型和这些数据文件应发送到安装在单独机器上的CPLEX实例。 问题是允许加载和运行文件的OPLJavaAPI不提供任何API来使用远程CPLEX实例。另一方面,

  • 问题内容: 我有一个使用Spring Batch和Spring MVC的应用程序。我可以将Spring Batch Admin单独部署,并与我的应用程序使用的数据库一起使用,尽管我想将其集成到我自己的应用程序中,还可能会修改其中一些视图。 有没有简单的方法可以做到这一点,还是我必须将其分叉然后从那里去? 问题答案: 根据这个线程显然有一个简单的方法; 在以下位置为Batch Admin定义Disp