5

我在 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);
    }
}

当我运行时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()

当我用谷歌搜索这个错误时,我可以找到如何修复使用反射调用[AssemblyInitialize]方法的代码的建议。但是那个代码不是我的,它是:

Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestExecuter.RunAssemblyInitializeMethod()

我可以使用[ClassInitialize]方法而不是[AssemblyInitialize]并且它可以工作,但我仍然想使用 [AssemblyInitialize] 方法。

提前感谢您的任何建议。

4

2 回答 2

5

您实际上并不需要继承。您可以在包含 AssemblyInit 和 AssemblyCleanUp 属性方法的测试项目/程序集中放置一个单独的类。像这样:

[TestClass]
public static class AssemblyInitializer
{
    [AssemblyInitialize]
    public static void AssemblyInit(TestContext context)
    {

    }

    [AssemblyCleanup]
    public static void AssemblyCleanup()
    {
    }
}
于 2012-11-20T11:31:00.260 回答
0

如果您[TestClass]从中删除,问题是否仍然存在TestClassA<T>

[测试类]

 public class TestClassA<T>
 {
 }
于 2012-11-02T13:34:41.400 回答