【问题标题】:Visual Studio 2010 - UnitTest - Exception while using generics and AssemblyInitializeVisual Studio 2010 - UnitTest - 使用泛型和 AssemblyInitialize 时出现异常
【发布时间】:2012-11-02 13:06:35
【问题描述】:

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

提前感谢您的任何建议。

【问题讨论】:

  • 抱歉,Visual Studio 2010,不是 2008...我刚刚更正了它...
  • 在您的Initialize 方法中,您是否引用了T 类型?
  • 不,我不知道。它不相关,只是不能一起工作。
  • 我试过没有 。我的测试通过了。
  • 嗯,谢谢,但它应该如何提供帮助?我的问题是如何让它一起工作——泛型和 AssemlbyInitialize。不要删除它的一部分......

标签: c# visual-studio-2010 unit-testing generics


【解决方案1】:

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

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

    }

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

【讨论】:

  • 这是一个很好的解决方法,谢谢。因为我没有在初始化方法中引用类型 T,所以我不需要它出现在那个类中,我可以把它放在其他一些类中,就像你建议的那样。该错误仍然存​​在,但此解决方法对我有用。谢谢。
【解决方案2】:

如果从TestClassA&lt;T&gt; 中删除[TestClass],问题是否仍然存在?

[TestClass]

 public class TestClassA<T>
 {
 }

【讨论】:

  • 感谢您的努力。这个我已经试过了,但是如果我删除 [TestClass] 属性,[AssemblyInitialize] 方法根本不会被调用。
猜你喜欢
  • 2011-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多