我目前正在编写一个单元测试框架,最终将运行用 Visual Studio 编写的标准单元测试。该框架当前无法与访问器一起正常工作。考虑以下测试方法:
[TestMethod()]
public void TestMethod()
{
ExampleMethods_Accessor target = null;
target = new ExampleMethods_Accessor();
target.SomeMethod();
}
在此示例中,访问器已由 Visual Studio 生成。使用 Visual Studio 的单元测试环境运行时,单元测试工作得非常好。但是,我想从我的框架中调用 TestMethod()。在“target = new ExampleMethods_Accessor()”行,抛出以下异常:
“Proband.ExampleMethods_Accessor”的类型初始化程序引发了异常。
内部异常:
无法加载文件或程序集:Proband,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null...
有人知道 Microsoft 单元测试框架如何调用单元测试吗?我在想这可能是由于缺少 TestContext 对象。就我而言,这是“空”。在 Visual Studio 中启动单元测试时,TestContext 对象包含大量信息。可能是我需要正确初始化它吗?它需要如何初始化?
感谢所有的帮助,克里斯蒂安
编辑:
我一直在尝试访问器的工作方式。我使用 ILSpy 查看 Proband_Accessor.dll 中生成了哪些代码。事实证明,导致异常的指令是:
SomeClass_Accessor.m_privateType = new PrivateType("Probant, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Probant.SomeClass");
我将单元测试代码修改为这样(仅用于测试):
[TestMethod()]
[DeploymentItem("Proband.dll")]
public void SomeMethodTest()
{
ExampleMethods_Accessor target = null;
ExampleMethods c = null;
try
{
Assembly.Load("Proband, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"); // this works fine
PrivateType tx = new PrivateType(typeof(ExampleMethods)); // this works fine as well (also without loading the assembly)
PrivateType t = new PrivateType("Proband, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Proband.ExampleMethods"); // this causes the exception
c = new ExampleMethods(); // this works fine
target = new ExampleMethods_Accessor(); // this causes the exception as well
}
catch (Exception ex)
{
Console.WriteLine();
}
int actual;
actual = target.SomeMethod();
}
我完全不明白,为什么“new PrivateType(”Proband,Version ....)不起作用。有人知道吗?