美文网首页
单例模式之于单元测试

单例模式之于单元测试

作者: aiwonijiubaobao | 来源:发表于2017-10-23 22:28 被阅读0次
    通常我们会看到的单例模式
    public class AI {
      private static X instance = null;
    
      private AI() {}
    
      public static AI instance() {
        if (instance == null)
          instance = new AI();
        return instance;
      }
    
      // more methods...
    }
    

    这里我们先放过它饿不饿已经同不同步的问题。。。狠抓它对于单元测试的破坏。。。

    显然我们在单元测试中是不喜欢单例模式的, 因为我们没法mock出一个单例对象。因为单例中的实例是私有的, 所以为了单元测试, 我们或许可以这么干:

    public class AI  {
      static AI instance = null;
    
      private AI () {}
    
      public static AI instance() {
        if (instance == null)
          instance = new AI ();
        return instance;
      }
    
      // methods.
    }
    
    class TestAI {
      @Before
      public setup() {
        AI.instance = new AIMock();
      }
    }
    
    class AIMock extends AI{
        // overide methods
    }
    

    我们做了哪些改动?
    很简单, 把instance改成了包可见, 这样既不会影响代码的封装性, 也满足了测试的需求。 Sounds good~.

    相关文章

      网友评论

          本文标题:单例模式之于单元测试

          本文链接:https://www.haomeiwen.com/subject/aqszuxtx.html