好的做法:保持局部变量作用域 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",它应该是一个字段。
好的做法规定变量应尽可能声明为本地变量。然而,为了单元测试,这妨碍了依赖注入的良好实践。
示例:
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",它应该是一个字段。