好的做法:保持局部变量范围VS依赖注入

时间:2016-08-29 18:37:27

标签: java dependency-injection scope guice

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

示例:

Class A {

    public A() {}

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

        // more code here
    }
}

现在我无法对start()方法进行单元测试。 (getAllVMs()在这种情况下恰好是一个静态方法,但它可能就像new对象一样容易。注意:我不想使用powermock)。< / p>

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

有没有办法解决这个问题,还是我被迫将其作为一个班级领域?

由于

1 个答案:

答案 0 :(得分:2)

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