@RequestParam 中的单元测试占位符 defaultValue

Posted

技术标签:

【中文标题】@RequestParam 中的单元测试占位符 defaultValue【英文标题】:Unit testing Placeholder defaultValue in @RequestParam 【发布时间】:2018-03-14 09:56:01 【问题描述】:

我正在尝试测试我的控制器,该控制器有一个带有 RequestParam 的处理程序,该处理程序配置了一个指向占位符的默认值:

@Controller     
public class AgeController 
    @GetMapping("/age")
    public String home(@RequestParam(name="current", defaultValue="$default.age") Integer age) 
        return "age"+age;
    

当我通过浏览器进行测试时,这可以正常工作,但是当我使用以下测试用例时,它会引发异常:

测试用例:

public class AgeControllerTest 
    AgeController controller
    MockMvc mockMvc;

    @Before 
    public void setUp() 
        ageController = new AgeController();
        mockMvc = MockMvcBuilders.standaloneSetup(controller).addPlaceholderValue("default.age", "10").build();
    

    @Test
    public void test() 
        mockMvc.perform(get("/age")).andExpect(status().isOk());
    


例外:

Caused by: java.lang.NumberFormatException: For input string: "$default.age"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.valueOf(Unknown Source)
    at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:208)
    at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:113)
    at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:468)
    at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:441)
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:199)
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:108)
    at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:64)
    at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:47)
    at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:713)
    at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:120)

【问题讨论】:

【参考方案1】:

考虑使用@TestPropertySource。

@TestPropertySource(properties = "default.age = 10")
public class AgeControllerTest 
    ...

【讨论】:

以上是关于@RequestParam 中的单元测试占位符 defaultValue的主要内容,如果未能解决你的问题,请参考以下文章

使用 std::bind 占位符和 boost 库的问题

@RequestParam 与 @PathVariable

Springboot@PathVariable注解使用--请求路径占位符

UITextField 占位符对齐滚动问题

在xp_sprintf中的Int占位符%d - SQL Server

将占位符添加到表格视图单元格上的文本字段