私はいくつかのクラスによって実装されているジェネリックとのインターフェースを持っています。これらの各クラスには、インタフェースを実装するプロキシクラスもあります。私はこのような何かを見たいと思うジェネリックを使用するタイプから継承するユニットテスト
public interface ISomeInterface<T>
{
T SomeProperty
{
get;
}
T SomeAction();
}
public interface IClassA : ISomeInterface<string>
{
void Action();
}
public class ClassA : IClassA
{
// Code goes here
}
public class ClassAProxy : IClassA
{
// Code goes here
}
ユニットテストコード:
public abstract class ISomeInterfaceTests<T>
{
[TestMethod()]
public void SomePropertyTest()
{
ISomeInterface<T> target;
ISomeInterface<T> oracle;
this.CreateInstance(out target, out oracle);
Assert.AreEqual(oracle.SomeProperty, target.SomeProperty);
}
[TestMethod()]
public void SomeActionTest()
{
ISomeInterface<T> target;
ISomeInterface<T> oracle;
this.CreateInstance(out target, out oracle);
T oracleValue = oracle.SomeAction();
T targetValue = target.SomeAction();
Assert.AreEqual(oracleValue, targetValue);
}
// More tests
protected abstract void CreateInstance(out ISomeInterface<T> target, out ISomeInterface<T> oracle);
}
[TestClass()]
public class ClassAProxyTests : ISomeInterfaceTests<string>
{
// ClassAProxy specific tests
protected override void CreateInstance(out ISomeInterface<string> target, out ISomeInterface<string> oracle)
{
// Create target as ClassAProxy here and oracle as ClassA
}
}
をしかし、これはエラーを与える: UTA002:TestClassを属性は、汎用クラスISomeInterfaceTestsに定義することはできません大体このコードを与えます<T>。
これにはすばらしい回避策がありますか?現在、私が考えることができる最高のソリューションは、ISomeInterfaceTestsの異なるテストメソッドを呼び出すClassAProxyTestsのメソッドを持つことです。<T>。
- それはISomeInterfaceTests <T>を実施し、各テストのために手動で行う必要があります。しかしそのアプローチにはいくつかの問題があります。
- 一方のメソッドがアサーションに失敗した場合、残りのメソッドは実行されません。
- ExpectedException属性を使用することはできず、try catchステートメントで必要なコードをラップする必要があります。
しかし、もっと良い解決策が私を逃しています。
残念ながら、NUnitを使用することは、承認を得るためにかなりの数の赤いテープが必要になるため、この段階ではオプションではありません。 – Cornelius