私の問題はこれらに似ています:
しかし
コントローラー メソッドのシグネチャが与えられた場合:
public String setupForm(
@ModelAttribute("notification") Notification n, RedirectAttributes redirect)
そして、(Mockitoを使用して)テストが与えられます:
@Mock
private AddNotificationController handler;
@Test
public void get() throws Exception{
request.setRequestURI("/addNotification/save.do");
request.setMethod("GET");
adapter.handle(request, response, handler);
verify(handler,times(1)).setupForm(any(Notification.class), any(RedirectAttributes.class));
}
そして、実行時に例外が発生しました:
org.springframework.web.bind.annotation.support.HandlerMethodInvocationException:
Failed to invoke handler method [public java.lang.String ep.rdp.web.AddNotificationController.setupForm(a.b.c.Notification,org.springframework.web.servlet.mvc.support.RedirectAttributes)];
nested exception is java.lang.IllegalStateException:
Argument [RedirectAttributes] is of type Model or Map but is not assignable from the actual model.
You may need to switch newer MVC infrastructure classes to use this argument.
実際、私は問題を知っており、スプリングを適切に設定することで解決する方法を知っていますが、単体テストではありません。
質問: モックを機能させるには、他に何をセットアップする必要がありますか?
追加情報
モックの基本設定:
@Before
public void setup() {
// adapter = new AnnotationMethodHandlerAdapter();
adapter = new RequestMappingHandlerAdapter();
request = new MockHttpServletRequest();
/*
* needed for AnnotationMethodHandlerAdapter when resolving controlle level mapping
*/
request.setAttribute(HandlerMapping.INTROSPECT_TYPE_LEVEL_MAPPING, Boolean.TRUE);
response = new MockHttpServletResponse();
}
実際に
- AnnotationMethodHandlerAdapter を使用すると、この症状が発生します。
RequestMappingHandlerAdapter を使用すると、次のようになりました。
java.lang.ClassCastException: ep.rdp.web.CacheController$$EnhancerByMockitoWithCGLIB$$d8aab2c0 は org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter で org.springframework.web.method.HandlerMethod にキャストできません.java:80)