【发布时间】:2014-01-23 16:34:00
【问题描述】:
我有几个类共享一些常见的无状态方法,所以我创建了一个 Util 类,这里是一个示例方法:
public class FileUtil {
private static final int kFILEBUFSIZE = 128;
private static FileUtil fSingleton;
public static synchronized FileUtil instance() {
if( fSingleton == null )
fSingleton = new FileUtil();
return fSingleton;
}
.....
因此,所有使用这些方法的类都会对 Util 类进行静态导入。现在问题来了,当我测试时,静态方法不能被覆盖。创建一个所有其他类都扩展的基类(并不真正遵循“是”主体),或者只是将需要重写以进行测试的静态方法移动到主类中会更好吗?
在我的测试期间,我想重写 instance() 并返回一个模拟对象。
【问题讨论】:
-
为什么在测试期间需要重写这些方法?除非他们使用一些令人痛苦的外部依赖,否则请保持原样。您真的不需要将您正在测试的代码与 所有 其他代码隔离开来。
-
当你回答时,我正在写完全相同的东西:D
-
作为一个旁注,你会让你的 Util 类最终而不是公共构造函数:)
-
如果你需要模拟它,它不应该是静态的!否则,就这样吧(正如其他人已经说过的那样)。
-
我从不在我的代码中直接处理文件。我使用一个接口(例如InputStreamSource 或Resource)。这样我就可以轻松地使用 StringResource 或类似方法进行模拟。
标签: java android oop inheritance