Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当Spring控制器请求属性是接口时,如何防止BeanInstationException_Java_Spring_Junit_Spring Test - Fatal编程技术网

Java 当Spring控制器请求属性是接口时,如何防止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

我正在尝试使用JUnit和Mockito创建一个Spring控制器测试。我目前使用mockMvc作为我的方法,但我遇到的主要问题是,所有控制器方法都被定义为将接口作为参数,并且在尝试运行测试时会导致BeanInstationException。以下是一个可能的控制器定义示例:

@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"));
}