良好做法要求变量应尽可能地声明为本地变量。然而,这是为了单元测试而妨碍依赖注入的良好实践。
示例:
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>
有没有办法解决这个问题,还是我被迫将其作为一个班级领域?
由于
答案 0 :(得分:2)
如果仅在单个方法调用中需要该变量的值,则将其作为方法参数传递。如果它适用于多个独立的方法调用,提供一个公共上下文,那么逻辑范围比方法“更大”,它应该是一个字段。