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

标签 unit-testing spring-mvc mocking mockmvc

我正在尝试测试我的 Controller ,它有一个处理程序,其中 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());
    }

}

异常(exception):

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)

最佳答案

考虑使用@TestPropertySource。

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

关于unit-testing - 单元测试 @RequestParam 中的占位符 defaultValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46540579/

相关文章:

python - 如何在 Python 单元测试中模拟外部服务器?

c# - 如何对调用 Action 的 HTML Helper 进行单元测试?

python - 将 Python 模块作为参数传递是一个好习惯吗

java - Java Web 应用程序中的层

spring-mvc - 从 Spring Web MVC Controller 返回带有查询参数的 View 字符串?

c++ - 覆盖 Cpp 中的链接以指向模拟实现

unit-testing - 如何对使用springSecurityService的 Controller 进行单元测试?

javascript - AngularJS 模拟 $http 返回错误

forms - 测试 symfony 2 表单

java - 为什么在 Spring 中有 2 种处理静态资源的方式(addResourceHandlers 和容器的 Default Servlet")?