如何在NUIt中测试私有变量?

问题描述 投票:0回答:5

我有一个静态类,它有一个私有变量。

private static Dictionary<strng, string> items = new Dictionary<string, string>();

该类的许多公共方法都会访问这个字典对象。 现在我想编写 NUUnit 测试类(在不同的库中)。我如何测试这个私有变量?

unit-testing nunit
5个回答
9
投票

我不会讨论是否应该测试内部类的内部方法。您可以公开您的内部方法/属性/类/等。通过使用 InternalsVisibleToAttribute 属性到外部库。

例如,如果您的单元测试库名为 MyUnitTestsLibrary,只需在项目(正在测试的项目)的 AssemblyInfo.cs 文件中添加以下内容即可。

[assembly:InternalsVisibleTo("MyUnitTestsLibrary")]

这将使 MyUnitTestsLibrary 库成为您要测试的项目的友元库,并公开其所有内部内容,以便您可以进行单元测试。


6
投票

我知道问题是关于 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);
}

3
投票

您不测试私有变量,而是测试类的行为。

这意味着您应该仅测试类的公共接口。

另请参阅这个问题。


2
投票

在单元测试时,您应该测试公共接口,而不是私有实现。检查当您对其执行操作时界面的行为是否符合预期,而无需检查字典本身。这样,如果您将来决定用不同的数据结构替换字典,您将不会破坏所有测试。


0
投票

如何调用下面的私有方法我必须满足私有方法

私有异步任务 LogoutFromIDP(string emailId) { 尝试 { //使用电子邮件从 IDP 注销帐户 身份标识 = new Identity(); 身份.用户名=电子邮件ID; var account = wait _accountManager.GetAccountByEmailId(emailId); 身份.UserType = (IdentityEntity.AccountType)account.AccountType; 响应response =等待_identityAccountManager.LogOut(identity).ConfigureAwait(false); 返回真; } 捕获(异常) { 返回假; } }

© www.soinside.com 2019 - 2024. All rights reserved.