Cub*_*oop 5 c# generics unit-testing visual-studio-2010
我在 Visual Studio 2010 中遇到了单元测试问题。我粘贴了下面的简化代码。
[TestClass]
public class TestClassA<T>
{
[AssemblyInitialize()]
public static void Initialize(TestContext testContext) {}
}
[TestClass]
public class TestClassB : TestClassA<String>
{
[TestMethod]
public void TestMethod()
{
Assert.IsTrue(true);
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行时TestMethod()
,出现以下异常:
Assembly Initialization method TestProject.TestClassA`1.Initialize threw exception. System.InvalidOperationException: System.InvalidOperationException: Late bound operations cannot be performed on types or methods for which ContainsGenericParameters is true.. Aborting test execution.
at System.Reflection.RuntimeMethodInfo.ThrowNoInvokeException()
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestExecuter.RunAssemblyInitializeMethod()
Run Code Online (Sandbox Code Playgroud)
当我谷歌这个 bug 时,我可以找到如何修复使用反射调用[AssemblyInitialize]方法的代码的建议。但那个代码不是我的,它是:
Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestExecuter.RunAssemblyInitializeMethod()
Run Code Online (Sandbox Code Playgroud)
我可以使用[ClassInitialize]方法代替[AssemblyInitialize]并且它可以工作,但我仍然想使用 [AssemblyInitialize] 方法。
提前感谢您的任何建议。
小智 5
你实际上并不需要继承。您可以在包含 AssemblyInit 和 AssemblyCleanUp 属性方法的测试项目/程序集中放置一个单独的类。像这样:
[TestClass]
public static class AssemblyInitializer
{
[AssemblyInitialize]
public static void AssemblyInit(TestContext context)
{
}
[AssemblyCleanup]
public static void AssemblyCleanup()
{
}
}
Run Code Online (Sandbox Code Playgroud)