Lea*_*ner 6 nunit unit-testing
我有一个静态类,它有一个私有变量.
private static Dictionary<strng, string> items = new Dictionary<string, string>();
Run Code Online (Sandbox Code Playgroud)
该类的许多公共方法都访问此字典对象.现在我想编写NUNit测试类(在不同的库中).我该如何测试这个私有变量?
我不会讨论天气你应该或不测试内部类的内部方法.您可以公开内部方法/属性/类/等.通过使用InternalsVisibleToAttribute属性到外部库.
例如,如果您的单元测试库名为MyUnitTestsLibrary,只需在项目的AssemblyInfo.cs文件中添加以下内容(正在测试的文件).
[assembly:InternalsVisibleTo("MyUnitTestsLibrary")]
Run Code Online (Sandbox Code Playgroud)
这将使MyUnitTestsLibrary库成为您项目的朋友库,以便对其进行测试并公开所有内部内容,以便进行单元测试.
我知道问题是关于NUnit的,我不想争论测试私有成员是好是坏做法。事实是有时这是必要的,尤其是当您不得不处理无法重构的遗留或设计不良的代码时。
因此,我想提及Gallio / MbUnit提供了一个称为Mirror的轻型API,以简化对私有类型成员的测试。
示例:以下测试示例调用实例SomePrivateMethod上命名的私有方法foo。
[Test]
public void SampleTest()
{
var foo = new Foo();
int actual = Mirror.ForObject(foo)["SomePrivateMethod"].Invoke();
Assert.AreEqual(123, actual);
}
Run Code Online (Sandbox Code Playgroud)