首页 > 解决方案 > 在 jUnit 中,“+”符号的验证总是失败

问题描述

我在spring boot中有这个简单的控制器,带有参数验证:

@ApiOperation(value = "Test")
@ApiResponses(value = {
        @ApiResponse(code = 200, message = "OK"),
        @ApiResponse(code = 400, message = "Bad request")
})
@PutMapping(value = "/test")
@ResponseStatus(value = HttpStatus.OK)
public void test(
        @ApiParam(value = "Plus", required = true)
        @Pattern(regexp = "^\\+$")
        @RequestParam(value = "plus") String plus) {
    System.out.println("Validation passed: " + plus);
}

如您所见,Plus字段仅接受“+”符号。当我尝试运行它并在 localhost swagger 上触发请求时,它可以工作。验证通过,我得到 HTTP 200 状态。

生成的招摇文件看起来不错,验证在那里:pattern: "^\\+$"

如果我尝试运行 jUnit 测试,验证失败,我会收到 400 Bad Request。在测试中,我使用从 swagger 文件生成的控制器:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@ActiveProfiles("test")
@DirtiesContext
public class CeCommissioningBffControllerTest {
    
    @MockBean
    private controllerApi api; //This is generated class from swagger file

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void test(){
        api.test("+");
    }
}

为什么它在 jUnit 中失败?我试图在任何地方用“$”符号替换'+' ,然后令人惊讶的是它可以工作。

标签: javaspring-bootjunitswagger

解决方案


推荐阅读