代码之家  ›  专栏  ›  技术社区  ›  theringostarrs

单元测试:使用另一种方法检查被测方法是否正确运行

  •  3
  • theringostarrs  · 技术社区  · 15 年前

    我正在正确地编写单元测试,我想知道通过调用另一个方法来验证结果来测试正在测试的方法的结果是否是一种糟糕的技术?

    在下面的示例中,我只能通过调用FetchObject或HasCachedObjects属性来检查StoreObject方法调用是否成功(即存储在缓存中的对象),这两个属性都包含应单独测试的逻辑。在这种情况下,如果结果对公共API是隐藏的,您会怎么做?

    我有一个缓存类:

    public class Cache {
    
      private Dictionary<string, object> _Cache = null;
    
      public bool HasCachedObjects {
        get {
          if (_Cache.Count > 0) {
            return true;
          } else {
            return false;
          }
        }
      }
    
      public Cache() {
        _Cache = new Dictionary<string,object>();
      }
    
      public void StoreObject(string key, object obj) {
        _Cache[key] = obj;
      }
    
      public object FetchObject(string key) {
        if (_Cache.ContainsKey(key)) {
          return _Cache[key];
        }
    
        return null;
      }
    }
    
    3 回复  |  直到 15 年前
        1
  •  3
  •   TrueWill    15 年前

    不要将测试用例视为测试方法;将其视为测试功能单元(或者可能是用例)。

    因此,您的测试可能是storeobject_when successful_addstocache之类的。

    是的,我会通过公共API确认测试。

        2
  •  2
  •   kyoryu    15 年前

    一点也不。实际上,这可能是两种不同的测试——一种是在缓存对象后验证hascachedObjects是否为真,另一种是在存储对象后验证是否可以检索对象。

    (除了用稍微不同的API包装字典外,我真的不确定这个类会做什么,但这是另一个主题…)

        3
  •  0
  •   Alexander Kojevnikov    15 年前

    您可以测试不同的用例/场景,而不是测试单个方法,例如:添加到缓存-检查对象是否存在,等等…