1

Mockito を使用して GWTP プロジェクトをテストしていますが、エラーが発生しました。

    com.google.inject.CreationException: Guice creation errors:

1) No implementation for javax.servlet.http.HttpServletRequest was bound.
  while locating com.google.inject.Provider<javax.servlet.http.HttpServletRequest>
    for parameter 0 at com.gwtplatform.dispatch.server.guice.request.DefaultRequestProvider.<init>(DefaultRequestProvider.java:35)
  at com.gwtplatform.dispatch.server.guice.DispatchModule.configure(DispatchModule.java:135)

以下は、単体テストのコードです。

@Mock
private TestActionHandler mockTestActionHandler;

@Before
public void setUp() {
    Injector injector = Guice.createInjector(new ServerModule(), new MockHandlerModule() {

        @Override
        protected void configureMockHandlers() {
                bindMockActionHandler(TestActionHandler.class, 
                        mockTestActionHandler);
            }
        }); 
}

TestActionHandler のコードは次のとおりです。

public class TestActionHandler implements ActionHandler<TestAction, TestResult> {

    private final Provider<HttpServletRequest> provider;

    @Inject
    public RetrieveEventsUsingCategoryIdActionHandler(
            final Provider<HttpServletRequest> provider) {
        this.provider = provider;
    }

    @Override
    public TestResult execute(TestAction action, ExecutionContext context) {
        //handle action
    }
}

誰かがこれを修正するのを手伝ってくれますか? どうも!

4

2 に答える 2

2

GWTP グループの dinde の投稿のおかげで、この問題は解決しました。

Providerテストでforが見つからないと不平を言っているようです。そのHttpServletRequestためsetUp、テストの で、プロバイダー for を追加するHttpServletRequestと、問題は解決します。作業コードは次のとおりです。

@Mock
private TestActionHandler mockTestActionHandler;
@Mock
private HttpServletRequest servletRequest;

@Before
public void setUp() {
    Injector injector = Guice.createInjector(new ServerModule(), new MockHandlerModule() {

        @Override
        protected void configureMockHandlers() {
                bindMockActionHandler(TestActionHandler.class, 
                        mockTestActionHandler);
            }
        });

        @SuppressWarnings("unused")
        @Provides 
        public HttpServletRequest createServletRequest() { 
            return servletRequest; 
        } 
}
于 2011-12-12T17:03:36.503 に答える
0

テストクラス内で @Bind と @Mock の両方でアノテーションが付けられたフィールド

@Bind
@Mock
private HttpServletRequest request;

mycila-testing-guice2 プラグインを使用して動作します。

于 2012-09-09T14:17:47.593 に答える