Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在非构造函数方法中使用Guice注入依赖项_Java_Mocking_Tdd_Guice_Roboguice - Fatal编程技术网

Java 在非构造函数方法中使用Guice注入依赖项

Java 在非构造函数方法中使用Guice注入依赖项,java,mocking,tdd,guice,roboguice,Java,Mocking,Tdd,Guice,Roboguice,我正在开发一个动态创建HTTP请求的组件,我希望能够模拟这些请求进行单元测试 目前的实现情况如下所示: class ModelClass { public void populate() { HTTPRequest request = new HTTPRequest(); //configure request... request.send(); } } 有没有一种方法可以使用Guice来实例化请求,这样我就可以

我正在开发一个动态创建HTTP请求的组件,我希望能够模拟这些请求进行单元测试

目前的实现情况如下所示:

class ModelClass {
     public void populate() {
          HTTPRequest request = new HTTPRequest();
          //configure request...
          request.send();
     }
}
有没有一种方法可以使用Guice来实例化
请求
,这样我就可以用模拟类的实例来代替它进行测试?我能想到的最接近的方法是添加一个注入器作为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的要点。

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

class ModelClass {

   @Inject
   Provider<HTTPRequest> httpRequestProvider;

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

}
class模型类{
@注入
提供者httpRequestProvider;
公共空白填充(){
HTTPRequest请求=httpRequestProvider.get();
}
}
然后,在测试代码中,可以模拟“httpRequestProvider”以返回模拟的“HTTPRequest”实例

Provider<HTTPRequest> mockHttpRequestProvider = mock(Provider.class);
when(mockHttpReqestProvider.get()).thenReturn(yourMockHTTPRequestObject);
// Set this mock provider to the ModelClass instance. (You may have to use reflection)
Provider mockHttpRequestProvider=mock(Provider.class);
当(mockHttpRequestProvider.get())。然后返回(您的mockHttpRequestObject);
//将此模拟提供程序设置为ModelClass实例。(您可能必须使用反射)
有关注入提供者的信息:

考虑使用。它将Guice、JUnit和Mockito组合到一个框架中。+1,但您可以使用跳过额外的mock。