MS Test&私有访问器:访问私有嵌套类

时间:2013-01-29 09:10:19

标签: unit-testing mstest

我正在将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(...)的结果。

2 个答案:

答案 0 :(得分:1)

Tool_Accessor.Result - 将成为嵌套类的访问者。

答案 1 :(得分:1)

在这种情况下,最常见的方法是测试类的公共合同,并避免测试私有,因为它使测试对实际实现中的更改更加脆弱。尝试设计您的API,避免测试私有方法。在测试所需的私有方法时,在这种情况下,类可以打破单一责任原则。

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

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