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]メソッドを使用したいと思います。
提案をよろしくお願いします。