我有一个静态类,它有一个私有变量。
private static Dictionary<strng, string> items = new Dictionary<string, string>();
该类的许多公共方法都会访问这个字典对象。 现在我想编写 NUUnit 测试类(在不同的库中)。我如何测试这个私有变量?
我不会讨论是否应该测试内部类的内部方法。您可以公开您的内部方法/属性/类/等。通过使用 InternalsVisibleToAttribute 属性到外部库。
例如,如果您的单元测试库名为 MyUnitTestsLibrary,只需在项目(正在测试的项目)的 AssemblyInfo.cs 文件中添加以下内容即可。
[assembly:InternalsVisibleTo("MyUnitTestsLibrary")]
这将使 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);
}
在单元测试时,您应该测试公共接口,而不是私有实现。检查当您对其执行操作时界面的行为是否符合预期,而无需检查字典本身。这样,如果您将来决定用不同的数据结构替换字典,您将不会破坏所有测试。
如何调用下面的私有方法我必须满足私有方法
私有异步任务 LogoutFromIDP(string emailId) { 尝试 { //使用电子邮件从 IDP 注销帐户 身份标识 = new Identity(); 身份.用户名=电子邮件ID; var account = wait _accountManager.GetAccountByEmailId(emailId); 身份.UserType = (IdentityEntity.AccountType)account.AccountType; 响应response =等待_identityAccountManager.LogOut(identity).ConfigureAwait(false); 返回真; } 捕获(异常) { 返回假; } }