C#清除Nunit testcase中的私有列表数据(新手)

时间:2018-06-18 14:12:16

标签: c# list class nunit system.reflection

我想在使用variables测试代码时将默认值设置为listNunit

我的代码

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
        }
   }

你能帮助我摆脱这个吗?

2 个答案:

答案 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>());
    }

这些代码对我有用。