System.TypeInitializationException

sam*_*_33 5 c# infopath

我正在编写测试来测试Infopath Forms在Form Control中打开,我的测试方法是

[TestMethod]
public void Validate_OpenInfopathInFormControl()
{
    Helper.OpenForm();
    //Other Code    
}
Run Code Online (Sandbox Code Playgroud)

我写过Helper课程

public class Helper
{  
    public static void OpenForm()
    {
        //Code to Open Form
    }
}
Run Code Online (Sandbox Code Playgroud)

但每次我执行此代码时,这都给了我:

测试方法InfoPathTest.TestAPI.Validate_OpenInfopathInFormControl抛出异常:System.TypeInitializationException:'InfoPathTest.Helpers.Helper'的类型初始值设定项引发异常.---> System.NullReferenceException:对象引用未设置为对象的实例..

当我尝试调试时,当Helper类需要初始化时失败.这真的是在吃我的脑袋,对此有什么解决方案吗?

这是完整的助手类:

namespace InfoPathTest.Helpers
{
    public class Helper
    {
    //This is the form i need to OPEN
        private static MainForm f =  new MainForm();
        private static bool _isOpen = false;

        public static bool isOpen
        {
            set { _isOpen = value; }
            get { return _isOpen; }
        }

        public static void OpenForm()
        {
            try
            {
                f.Show();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            _isOpen = true;

        }

        public static void CloseForm()
        {
            f.Hide();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*Rob 6

你的测试调用Helper.OpenForm(),因为你没有静态构造函数,我唯一能看到的会导致抛出异常的是:

private static MainForm f =  new MainForm();
Run Code Online (Sandbox Code Playgroud)

因此,MainForm的构造函数中的某些内容可能会引发异常.在MainForm的构造函数的第一行放置一个断点,然后逐步执行,直到看到抛出异常的位置.

或者,您可能会发现更容易确定问题所在,至少在最初阶段,通过编写新测试,您可以new MainForm()直接执行这些调用:

[TestMethod]
public void Validate_OpenInfopathInFormControl()
{
    var form = new MainForm();
}
Run Code Online (Sandbox Code Playgroud)

在测试的唯一一行放置断点并进入构造函数以确定它为什么抛出一个NullReferenceException.