我在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]方法。

预先感谢您的任何建议。

最佳答案

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

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

    }

    [AssemblyCleanup]
    public static void AssemblyCleanup()
    {
    }
}

关于c# - Visual Studio 2010-UnitTest-使用泛型和AssemblyInitialize时发生异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13195821/

10-11 22:38