C# 从 Nunit 测试用例(新手)中清除私有列表数据



我想在使用Nunit测试我的代码时将默认值设置为variableslist.

我的代码

public class Myclass
{
static bool isShown = false;
protected static List<string> registery = new List<string>();
//My code
}

我需要更改默认值。因为每个测试用例都会更改此值。

我正在使用NUnit来测试我的应用程序。我通过参考这个尝试了一些事情。但它不起作用。

[TestFixture]
public class MyclassTest
{
Myclass obj = new Myclass();
[SetUp]
public void Init()
{
typeof(FusionLicenseProvider).GetField("isShown ", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance).SetValue(obj, false);
typeof(FusionLicenseProvider).GetField("registery", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance).SetValue(obj, null);
}
[TearDown]
public void Cleanup()
{
typeof(FusionLicenseProvider).GetField("isShown ", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance).SetValue(obj, false);
typeof(FusionLicenseProvider).GetField("registery", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance).SetValue(obj, null);
}
[Test]
public void Test01()
{
// Test case
}
}

你能帮我摆脱这个吗?

我敢打赌你会得到一些NullReferenceException,因为找不到请求的字段。这是由您的BindingFlags引起的。为了设置一个私有静态字段,你需要这个:

typeof(FusionLicenseProvider).GetField("isShown ", BindingFlags.NonPublic | BindingFlags.Static).SetValue(obj, false);

为了避免将来出现此类错误,您应该在以下之前明确添加一些空检查:

var field = typeof(FusionLicenseProvider).GetField("isShown ", BindingFlags.NonPublic | BindingFlags.Static);
if(field != null)
field.SetValue(obj, false);
else
throw new Exception(...);
[TearDown]
public void Cleanup()
{
typeof(FusionLicenseProvider).GetField("isShown ", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Static).SetValue(obj, false);
typeof(FusionLicenseProvider).GetField("registery", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Static).SetValue(obj, New List<string>());
}

这些代码对我有用。

最新更新