TDDで足を濡らそうとしています。MockitoをMockMvcおよびJunitと組み合わせて使用して、コントローラーの単体テストケースを作成しようとしています。
しかし、実行時エラーが発生してテストが失敗します。最初は、の検索に失敗したため、セットアップでMockMvcインスタンスを初期化するときに問題に直面していましたjavax.servlet.SessionCookieConfig
。
これを解決するには、javax.servlet
APIをダウンロードしてプロジェクトのビルドパスに構成しますが、
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.isAsyncStarted()
perform()
MockMvcインスタンスで使用中。
互換性のないサーバー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
APIにいつ追加されたかを確認し、クラスパスで参照するものが少なくともそのバージョン以上であることを確認してください。
「間違った」クラスバージョンがどこから来ているかを見つけるために、
-verbose:class
Javaの引数。ロードされたすべてのクラスと、それらがロードされた理由を正しく覚えている場合は、それがリストされます。詳細については、http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.htmlを参照してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加