【问题标题】:Need to test static Utils class需要测试静态Utils类
【发布时间】: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 类最终而不是公共构造函数:)
  • 如果你需要模拟它,它不应该是静态的!否则,就这样吧(正如其他人已经说过的那样)。
  • 我从不在我的代码中直接处理文件。我使用一个接口(例如InputStreamSourceResource)。这样我就可以轻松地使用 StringResource 或类似方法进行模拟。

标签: java android oop inheritance


【解决方案1】:

我希望这不是实际代码,因为 String 在我认识的任何 java 中都没有 size() 方法。

在 jUnit(或其他单元测试框架)中测试方法。

例如


public class TestBlammy
{
    @Test
    public void test1()
    {
       assertEquals(5, Util.sizeOf("12345"));
       assertEquals(0, Util.sizeOf(""));
       assertEquals(0, Util.sizeOf(null)); // you don't currently handle this, but should.
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    相关资源
    最近更新 更多