5

VisualStudio2010の単体テストに問題があります。以下の簡略化されたコードを貼り付けました。

[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()

[AssemblyInitialize]の代わりに[ClassInitialize]メソッドを使用できますが、それでも[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>ますか?

[TestClass]

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