单元测试 - MS Test和私有访问器:访问私有嵌套类



我正在使用MS Test与私有访问器结合使用来对我的类进行单元测试。我充分利用私有访问器(在VS 2012中不可用:-()来调用我的私有方法。这工作正常。

但是我无法访问私有嵌套类!

例如:

public class Tool
{
  private IList<Result> DoSomePreparation(object anything)
  {
    // do some preparations here
  }
  private class Result { }
}

通过私有访问器可以访问我的私有方法

{
  var accessor = new Tool_Accessor(new PrivateObject(new Tool()));
  accessor.DoSomePreparation(new object());
}

但是如何访问嵌套类呢?我需要它,因为我想嘲笑来自DoSomePreparation(...)的结果。

Tool_Accessor.Result - 将是嵌套类的访问器。

在这种情况下,

最常见的方法是测试类的公共契约,并避免测试私有契约,因为它使测试更容易受到实际实现中更改的影响。尝试设计您的 API,避免测试私有方法。当需要测试私有方法时,在这种情况下,类可能会破坏单一责任原则。

例如,XML 序列化。当在表示域业务对象的类中进行 XML 序列化时,尤其是使用继承时,当域对象之间存在层次结构时。在这种情况下,很难使用内部的 XML 序列化实现来测试此类域对象。但是当在域对象之外实现XML序列化时,比域对象和具有XML序列化逻辑的对象都可以使用公共协定轻松测试。

有时很难避免测试私有方法。在 .NET 上下文中,可以使此类方法作为内部方法访问,并使用 InternalsVisibleTo 属性从测试访问它。

最新更新