我有以下静态类:
public static class UnitTestDefinitions
{
public static int Foo = 4;
/// <summary>
/// static constructor
/// </summary>
static UnitTestDefinitions()
{
InitAccounts();
}
private static void InitAccounts()
{
// some code
}
// more code
}
我的NUnit测试无法运行,因为我无法访问Foo
:
我得到的实际例外是:
System.TypeInitializationException未被用户代码
处理 HResult = -2146233036 Message =类型初始值设定项 'Ublux.Communications.PrimaryService.UnitTestDefinitions'扔了一个 例外。来源= Ublux.Communications.CoreService
类型名= Ublux.Communications.PrimaryService.UnitTestDefinitions
堆栈跟踪: 在Ublux.Communications.CoreService.UnitTests.TestCloudServicesCore.TestAuthentication() 在C:\ GIT \ Ublux \ Ublux通信核心 服务\ Ublux.Communications.CoreService \ Ublux.Communications.CoreService \单元测试\ TestCloudServices_Core.cs:行 146 InnerException: 的HResult = -2146233040 Message =抛出类型'System.Threading.ThreadAbortException'的异常。
我一直在使用c#,所以对我来说很明显问题必须在静态构造函数中,换句话说,方法InitAccounts()
必须存在问题。
因此我在静态类UnitTestDefinitions上删除静态构造函数并手动调用InitAccounts()
方法:
答案 0 :(得分:0)
用户无法控制程序中何时执行静态构造函数。如果您的InitAccounts()
方法试图访问尚未初始化的对象,则可能会出现异常。由于您尚未提供该代码,因此很难说。这是完全避免静态类的一个重要原因(必要时使用Singleton)。