Java 使用只返回视图名称的方法对Spring3控制器进行单元测试
我的理解是,对spring控制器进行单元测试的一种有效方法是过于简单地实例化(所需控制器的)一个新实例并直接测试控制器方法。不用担心模拟请求等,因为spring本身确实需要测试 然而,我的许多控制器方法只是将视图名称作为单个字符串返回,我想测试模型本身是否具有正确的参数和数据 我是否需要更改这些方法,以便它们返回ModelAndView,这样我就可以在单元测试中访问模型?我的方法是否应该这样做(返回模型和视图)Java 使用只返回视图名称的方法对Spring3控制器进行单元测试,java,unit-testing,spring,controller,Java,Unit Testing,Spring,Controller,我的理解是,对spring控制器进行单元测试的一种有效方法是过于简单地实例化(所需控制器的)一个新实例并直接测试控制器方法。不用担心模拟请求等,因为spring本身确实需要测试 然而,我的许多控制器方法只是将视图名称作为单个字符串返回,我想测试模型本身是否具有正确的参数和数据 我是否需要更改这些方法,以便它们返回ModelAndView,这样我就可以在单元测试中访问模型?我的方法是否应该这样做(返回模型和视图) 在控制器方法中创建新模型和视图时,现有模型是否被覆盖?我将尝试回答您的一些问题 关于
在控制器方法中创建新模型和视图时,现有模型是否被覆盖?我将尝试回答您的一些问题 关于控制器的单元测试,有时我发现需要添加Spring的模拟请求和响应,因为一些Spring特性在请求上下文中期望请求和响应
class MyTest {
private MockHttpServletRequest request;
private MockHttpServletResponse response;
@BeforeMethod(alwaysRun = true)
public void setup() {
request = new MockHttpServletRequest();
response = new MockHttpServletResponse();
controller = new Controller( /*inject dependencies here*/ );
}
}
这很容易理解,因为如果它们不在那里,您将得到一个非常具体的错误,表明请求或响应不在上下文中
与模型相关,我发现返回ModelAndView和添加一些检查输出参数和视图名称的测试更容易
public void shows_xxx_index_view {
assertThat(modelAndView.getViewName(), equalTo("controller/index"));
}
public void model_contains_search_results {
assertThat(modelAndView.getModelMap().get("searchResults"), equalTo(expected_results));
}
我不知道模型是否被覆盖了
这是我在一个小项目中的经验,所以我绝不是专家,但我发现这种方法很有用