在非构造函数方法

时间:2015-04-29 10:15:00

标签: java mocking tdd guice roboguice

我正在处理一个动态创建HTTP请求的组件,并且我希望能够模拟这些单元测试请求。

目前实施情况如下:

class ModelClass {
     public void populate() {
          HTTPRequest request = new HTTPRequest();
          //configure request...
          request.send();
     }
}

有没有办法使用Guice实例化request所以我可以用模拟类的实例替换它进行测试?我能想出的最接近的是将一个注入器添加为ModelClass的实例变量:

class ModelClass {
     private final Injector injector;

     ModelClass(Injector injector){
          this.injector = injector;
     }

     public void populate() {
          HTTPRequest request = injector.getInstance(HTTPRequest.class);
          //configure request...
          request.send();
     }
}

但这基本上就像使用工厂一样,完全错过了Guice的观点。

1 个答案:

答案 0 :(得分:7)

您可以注入一个在代码中提供“HTTPRequest”实例的提供程序。

$("<label>" + responseText + "</label><br />").appendTo('#DlgHdBodyContainer').hide().show();

然后,在您的测试代码中,您可以模拟'httpRequestProvider'以返回模拟'HTTPRequest'实例。

class ModelClass {

   @Inject
   Provider<HTTPRequest> httpRequestProvider;

   public void populate() {
      HTTPRequest request = httpRequestProvider.get();
   }

}

有关注射提供者的信息:https://github.com/google/guice/wiki/InjectingProviders