如何对使用 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 通常会创建并使用它需要的时候。但是当测试该图的一小部分时,只需手动创建对象。