2011-12-10 93 views
1

我使用的Mockito来测试我的GWTP项目,我得到了一些错误:测试GWTP用的Mockito

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 
    } 
} 

任何人都可以帮我解决这个问题吗?太多了!

+0

你的ServerModule和MockHandlerModule类是怎么样的? –

回答

2

感谢dinde的post in GWTP group,我已经解决了这个问题。

看来,测试抱怨缺少ProviderHttpServletRequest,所以在测试的setUp,我添加提供程序FO的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; 
     } 
} 
0

使用mycila测试-guice2插件都与@Bind和@Mock注解测试类中

@Bind 
@Mock 
private HttpServletRequest request; 

对我的作品的字段。