我想在使用variables
测试代码时将默认值设置为list
和Nunit
。
我的代码
public class Myclass
{
static bool isShown = false;
protected static List<string> registery = new List<string>();
//My code
}
我需要更改默认值。因为每个测试用例都会改变这个值。
我正在使用NUnit
来测试我的应用程序。我通过引用this尝试了一些事情。但它没有用。
[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
}
}
你能帮助我摆脱这个吗?
答案 0 :(得分:1)
我打赌你得到一些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(...);
答案 1 :(得分:0)
[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>());
}
这些代码对我有用。