好的做法:保持局部变量作用域 VS 依赖注入

Good practice: Keeping local variable scope VS dependency injection

好的做法规定变量应尽可能声明为本地变量。然而,为了单元测试,这妨碍了依赖注入的良好实践。

示例:

Class A {

    public A() {}

    public void start() {
        Map<Integer, VirtualMachine> vms = VirtualMachine.getAllVMs();

        // more code here
    }
}

现在我无法对 start() 方法进行单元测试。 (在这种情况下,getAllVMs() 恰好是一个静态方法,但它也可以很容易地成为一个 new 对象。注意:我不想使用 powermock)。

所以我能做的就是使用 google guice 来注入它,但是如果我这样做,我需要给 vms class 范围,即使我只是在使用它在本地使用该方法。

有没有办法解决这个问题,还是我被迫将其设为 class 字段?

谢谢

如果仅在单个方法调用中需要该变量的值,则将其作为方法参数传递。如果它应用于多个独立的方法调用,提供一个共同的上下文,那么逻辑范围比方法"larger",它应该是一个字段。