我试图用TDD弄湿我的脚.我正在尝试使用Mockito与MockMvc和Junit一起为控制器编写单元测试用例.
但是我收到运行时错误,从而导致测试失败.起初,由于找不到javax.servlet.SessionCookieConfig,我在设置中初始化MockMvc实例时遇到了问题.
我通过下载javax.servlet api并将其配置到项目的构建路径来解决,但后来我面临着
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.isAsyncStarted()
在MockMvc实例上使用perform().
任何人都可以告诉我如何处理这种依赖,因为我认为它是由于不兼容的服务器servlet-api和javax.servlet api而发生的.
编辑:我发布我用于单元测试的代码,但我不认为这将是任何帮助,但以防万一:
@RunWith(MockitoJUnitRunner.class)
public class MyControllerTest {
@InjectMocks
private MyController myController = new MyController();
@Mock
private MyService myService = new MyServiceImpl();
private MockMvc mockMvc;
@Before
public void setUp(){
this.mockMvc = MockMvcBuilders.standaloneSetup(myController).build();
}
@Test
public void testList() throws Exception{
A a = new A();
a = createMockClassA();
Mockito.when(myService.getServiceForA(Mockito.anyMapOf(String.class, String.class))).thenReturn(a);
MvcResult result = this.mockMvc.perform(get("/somePath/")).param("someExpectedParam","value").andReturn();
System.out.println(result.getResponse().getContentAsString());
}
private static A createMockClassA(){
A a = new A();
a.setId(i);
a.setTitle("mock-" + i);
return a;
}
}