我试图用TDD让自己的双脚变得湿润。我正在尝试为使用Mockito和MockMvc和Junit的控制器编写单元测试用例。java.lang.NoSuchMethodError:javax.servlet.http.HttpServletRequest.isAsyncStarted()与Junit一起使用Mockito
但我得到一个运行时错误,从而失败我的测试。起初,由于找不到javax.servlet.SessionCookieConfig
,我在初始化设置中的MockMvc实例时遇到了问题。
这是我通过下载javax.servlet
API和它配置到项目的构建路径,但然后我一会儿就MockMvc实例使用perform()
面临的
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.isAsyncStarted()
解决。
任何人都可以告诉我如何处理这种依赖关系,因为我认为这是由于服务器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;
}
}
嗨延斯 我检查了API isAsyncStarted已添加到servlet 3.0中,我在我的项目构建中使用java.servlet-3.0.jar。 – Sourabh
这就是发展。检查服务器是否使用相同的servlet api级别。 –
服务器具有相同的servlet api级别。 – Sourabh