Java 当Spring控制器请求属性是接口时,如何防止BeanInstationException
我正在尝试使用JUnit和Mockito创建一个Spring控制器测试。我目前使用mockMvc作为我的方法,但我遇到的主要问题是,所有控制器方法都被定义为将接口作为参数,并且在尝试运行测试时会导致BeanInstationException。以下是一个可能的控制器定义示例:Java 当Spring控制器请求属性是接口时,如何防止BeanInstationException,java,spring,junit,spring-test,Java,Spring,Junit,Spring Test,我正在尝试使用JUnit和Mockito创建一个Spring控制器测试。我目前使用mockMvc作为我的方法,但我遇到的主要问题是,所有控制器方法都被定义为将接口作为参数,并且在尝试运行测试时会导致BeanInstationException。以下是一个可能的控制器定义示例: @Controller @RequestMapping("/test/testController") public class TestController { @RequestMapping(&q
@Controller
@RequestMapping("/test/testController")
public class TestController {
@RequestMapping("/test")
public ModelAndView test(@RequestAttribute("list") final List<String> testList) {
testList.add("test");
return new ModelAndView("testing");
}
}
这里显而易见的解决方案是,在指定控制器方法将采用的参数时,更新控制器方法以使用常规类而不是接口,但不幸的是,这是不可能的,因为需要不更改控制器方法代码。我已经试过了,并验证了它确实有效,但这并不是一个真正有用的解决方案,因为我将无法进行所需的更改
在这种情况下,是否有其他方法阻止此错误的发生?它尝试实例化
列表的事实基本上已经是一种迹象,表明出现了问题,因为只有在找不到相关属性时才会发生这种情况。让它ArrayList
看起来可以让它工作,但事实并非如此。所以我想你应该做的是修改你的测试。你应该使用requestAttr
@M.Deinum,而不是,,我尝试更新到post(“/test/testController/test”)。requestAttr(“list”,list)
(list变量只是一个新的数组列表),但我仍然面临同样的问题。
@InjectMocks
private TestController testController;
private MockMvc mockMvc;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
this.mockMvc = MockMvcBuilders.standaloneSetup(testController).build();
}
@Test
public void practiceTest() throws Exception {
this.mockMvc.perform(
post("/test/testController/test").with(x -> {
x.setAttribute("list", new ArrayList<String>());
return x;
})
)
.andExpect(status().isOk()).andExpect(view().name("testing"));
}