gpt4 book ai didi

java.lang.NoSuchMethodError : javax. servlet.http.HttpServletRequest.isAsyncStarted() 同时使用 Mockito 和 Junit

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:16:13 25 4
gpt4 key购买 nike

我正尝试着手研究 TDD。我正在尝试使用 Mockito 结合 MockMvc 和 Junit 为 Controller 编写单元测试用例。

但是我遇到了一个运行时错误,因此我的测试失败了。起初,由于找不到 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;
}
}

最佳答案

这听起来很像是类路径中的 servlet API 版本错误。

检查何时将 isAsyncStarted 添加到 API,并确保您在类路径中引用的至少是该版本或更高版本。

为了找到“错误”类版本的位置,您可以使用

-verbose:class

java 的参数。它将列出所有加载的类,如果我没记错的话,它们是从哪里加载的。参见 http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html了解详情。

关于java.lang.NoSuchMethodError : javax. servlet.http.HttpServletRequest.isAsyncStarted() 同时使用 Mockito 和 Junit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23759690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com