java - 使用 JUnit5 的集成测试用例不适用于 URL 中包含大括号的 get 请求

标签 java integration-testing junit5

使用 JUnit5 的集成测试用例不适用于 URL 中包含大括号的 get 请求。我收到以下错误消息。

java.lang.IllegalArgumentException:没有足够的变量值可用于扩展“vin”

下面是有效的获取 URL。

http://localhost:8080/test/%7Bvin%7D?coverageCode1=bca http://localhost:8080/test/ {vin}?coverageCode1=bca

下面是我的 Controller 类。

@RestController
@RequestMapping("")
public class TestController {

@Autowired
private TestService service;

@RequestMapping(value = "/test/{vin}", method = RequestMethod.GET)
public String getMessage(@RequestParam(value = "coverageCode1",
        required = false) String coverageCode1) {
    System.out.println(coverageCode1);
    return service.getMessage();
}
}

下面是集成类

@SpringBootTest
@AutoConfigureMockMvc
public class HttpRequestTest {

@Autowired
private MockMvc mockMvc;

@Test
public void greetingShouldReturnMessageFromService() throws Exception {
    URI url = URI.create("/test/" + URLEncoder.encode("{vin}", "UTF-8"));
    System.out.println(url);
    this.mockMvc.perform(get(url)
        .param("coverageCode1", "gdc"))
        .andDo(print())
        .andExpect(status().isOk())
        .andExpect(content().string(containsString("SUCCESS")));
}

}

下面是pom.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 https://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.2.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo_rolling_file_apender</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>11</java.version>
        <junit-jupiter.version>5.3.2</junit-jupiter.version>
        <mockito.version>2.24.0</mockito.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-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- junit 5 -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit-jupiter.version}</version>
            <scope>test</scope>
        </dependency>
        <!-- mockito + junit 5 -->
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-junit-jupiter</artifactId>
            <version>${mockito.version}</version>
            <scope>test</scope>
            <type>jar</type>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.2.5.RELEASE</version>
            <type>jar</type>
        </dependency>
        <!--<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
            <type>jar</type>
        </dependency>-->
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <dependencies>
                    <dependency>
                        <groupId>org.junit.platform</groupId>
                        <artifactId>junit-platform-surefire-provider</artifactId>
                        <version>1.0.1</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>

    </build>

</project>

最佳答案

这是由于配置而发生的。我在测试用例类文件中添加了以下注释并且它有效。

@AutoConfigureMockMvc

关于java - 使用 JUnit5 的集成测试用例不适用于 URL 中包含大括号的 get 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62382602/

相关文章:

java - 使工厂方法更具动态性

ember.js - Ember 集成测试模拟转换到另一条路线然后返回

javascript - 使用 Nodejs、express 和 supertest 进行集成测试

junit5 - 我们可以在 Junit 5 中将 @RepeatedTest 与 @ParameterizedTest 一起使用吗

java - 在 Java 中获取系统范围的独占锁

java - 显示带有 itext 中所有文本格式的 clob

java - PHP vs JAVA AES 加密,有什么区别?

grails - 为什么域类在同一个GroovyTestCase的两种不同方法中表现不同?

java - 如何解析JUnit结果xml文件并在java代码中获取测试用例?

java - 同一型号不等于