我避免使用静态类(假设我们实际上是在谈论包含静态方法的类),我这样做是为了可测试性。
如果您使用静态方法,您将很难模拟/存根代码中使用所述静态方法进行单元测试的部分。
考虑一下:
public String myMethod() {
String complicatedStringOutput = MyUtility.createComplicatedStringOutput();
//do some more complicated work on this String
}
要为此方法编写单元测试,您将如何使其成为“真正的单元测试”而无需同时测试 的创建complicatedStringOutput
?在我的单元测试中,我更喜欢只测试作为单元测试重点的方法。
将其更改为:
public String myMethod(MyNonStaticUtility util) {
String complicatedStringOutput = util.createComplicatedStringOutput();
//do some more complicated work on this String
}
突然之间,为这个类编写“真正的单元测试”要容易得多。MyNonStaticUtility
您可以通过使用存根或模拟来控制 的行为。
综上所述,这完全取决于您(或您的业务部门)。如果您重视单元测试并认为对复杂代码进行良好的测试覆盖很重要,那么这是首选方法。如果您没有时间/金钱来投资“修复”您的代码,那么它就不会发生。