如何对使用 Google Guice 的 class 进行单元测试?
How to unit test a class which uses Google Guice?
我有一个 java class 看起来像这样:
@Inject
PerPixelImageUpdater(PixelUpdaterFactory pixelUpdaterFactory, @Assisted BufferedImage image){
this.pixelUpdater = pixelUpdaterFactory.create(image);
}
public void someMethod(){
// some stuff
this.pixelUpdater.doSomething();
}
Google Guice 被用于依赖注入。
我正在尝试编写单元测试来覆盖 someMethod()
,但我不确定实例化被测 class 的最佳方法。
我最初的尝试是使用 Guice 创建 class:
ImageUpdaterFactory imageUpdaterFactory = injector.getInstance(ImageUpdaterFactory.class);
PerPixelImageUpdater perPixelImageUpdater = (PerPixelImageUpdater) imageUpdaterFactory.create(image);
但我不确定模拟调用 this.pixelUpdater.doSomething()
的最佳方式,因此我可以在不同的场景下测试该方法中的其他逻辑。
使用new
调用构造函数并传入模拟工厂会更好吗?在使用 Guice 进行单元测试 classes 时,我正在努力寻找有关推荐最佳实践的任何文档。
刚刚将我所有的单元测试从使用 Guice 创建的对象重写为手动实例化的对象,我可以肯定地说手动创建它们对于测试来说要好得多。它只是提供了更多的灵活性。用模拟、伪造、测试实现替换一个或所有参数要容易得多。
我正在使用 JUnit 5 依赖注入来让我自己更容易一些,有一个 "standard" 扩展提供了一些更常用的对象图,Guice 通常会创建并使用它需要的时候。但是当测试该图的一小部分时,只需手动创建对象。
我有一个 java class 看起来像这样:
@Inject
PerPixelImageUpdater(PixelUpdaterFactory pixelUpdaterFactory, @Assisted BufferedImage image){
this.pixelUpdater = pixelUpdaterFactory.create(image);
}
public void someMethod(){
// some stuff
this.pixelUpdater.doSomething();
}
Google Guice 被用于依赖注入。
我正在尝试编写单元测试来覆盖 someMethod()
,但我不确定实例化被测 class 的最佳方法。
我最初的尝试是使用 Guice 创建 class:
ImageUpdaterFactory imageUpdaterFactory = injector.getInstance(ImageUpdaterFactory.class);
PerPixelImageUpdater perPixelImageUpdater = (PerPixelImageUpdater) imageUpdaterFactory.create(image);
但我不确定模拟调用 this.pixelUpdater.doSomething()
的最佳方式,因此我可以在不同的场景下测试该方法中的其他逻辑。
使用new
调用构造函数并传入模拟工厂会更好吗?在使用 Guice 进行单元测试 classes 时,我正在努力寻找有关推荐最佳实践的任何文档。
刚刚将我所有的单元测试从使用 Guice 创建的对象重写为手动实例化的对象,我可以肯定地说手动创建它们对于测试来说要好得多。它只是提供了更多的灵活性。用模拟、伪造、测试实现替换一个或所有参数要容易得多。
我正在使用 JUnit 5 依赖注入来让我自己更容易一些,有一个 "standard" 扩展提供了一些更常用的对象图,Guice 通常会创建并使用它需要的时候。但是当测试该图的一小部分时,只需手动创建对象。