在参数上调用静态方法而不在参数中实例化类

jsd*_*vel 7 java

我真的进入了TDD,我开始在jUnit中使用mockito来提高我测试代码的能力.我真的很喜欢mockito!

我注意到我必须改变我对编码的思考方式,比如尽可能地将协作者传递给方法,并尽可能限制构造函数中的工作.

以下场景需要来自SO专家的一些建议.

假设我有一个方法,它会在某个类上调用一些静态方法.例如

public void method(){
    OtherClass.staticMethod();
}
Run Code Online (Sandbox Code Playgroud)

这通常很糟糕,但在我的场景中需要它.为了使代码在我的单元测试中更易于测试,我想避免依赖于OtherClass并将其作为参数传递.

这不起作用,因为它产生编译时错误.

public void method(Class<? extends OtherClass> util){
    util.staticMethod();
}
...
method(OtherClass.class);
Run Code Online (Sandbox Code Playgroud)

这可行,但我不喜欢实例化的OtherClass,如果我不需要,因为它只是一类静态实用程序,如方法:

public void method(OtherClass util){
     util.staticMethod();
}
...
method(new OtherClass());
Run Code Online (Sandbox Code Playgroud)

我向您提问:如果不使用新关键字,是否有更好的方法来实现这一目标?

har*_*rsh 0

在您的代码示例中:

public void method(){
    OtherClass.staticMethod();
}
Run Code Online (Sandbox Code Playgroud)

我的理解是,除了静态方法调用之外,上面的方法中应该还有一些逻辑,这就是您想要测试的而不是静态方法。

如果是这样,在这种情况下,您可以编写模拟实现,OtherClass.staticMethod其要么绕过所有逻辑,要么返回所需值或实现特定逻辑。这将避免依赖OtherClass并给予测试明确的控制。