1

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

4

2 回答 2

1

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

于 2013-01-29T10:25:51.973 回答
1

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

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

Sometimes it's hard to avoid testing of private methods. In context of .NET you can make such methods accessible as internals, and access to it from tests using InternalsVisibleTo attribute.

于 2013-01-31T16:08:47.150 回答