共有の基本インターフェースpublic interface IOperation {...}
と、実装する多数 (数十、すぐに 100 以上) の異なるオブジェクトがありますIOperation
。
また、これらすべての実装のテストも用意されています。これらはすべてTestOperationCommon
、Create メソッドの実際の操作クラスとnew
そのような操作の型でテンプレート化された、呼び出された基本クラスから継承されています。1 つから 5 つのテンプレート パラメーターを使用して TestOperationCommon を実装しています (これですべての操作に十分です)。
さて、最近、すべての操作の実装を内部にし、公開のみにすることが決定されました。これらの操作IOperation
は実装の詳細であるため、これは良い考えのようです。そして、[InternalsVisibleTo(...)]
テストも解決されたようです。
ただし、パブリック テスト クラスへのジェネリック パラメーターが内部 (少なくともテスト対象の実際のクラス) になっているため、テスト構造を使用できなくなっていることがわかりました。
Inconsistent Accessibility .... less accessible than ...
エラー。以下のコードでは、パブリック テスト クラスは、内部のジェネリック パラメーター T を持つ TestOperationCommon から継承できません。しかし、これらすべての共有動作テストを特定のテストに複製することも、悪い考えのように思えます。
[TestClass]
内部の esをテストするために vstest フレームワーク (VS2013+) を取得する方法はありますか?または、多くのコードを複製せずに共有テストを保持できる別の方法はありますか?
それとも、間違っていますか (これらの「実装の詳細クラス」を内部にしています)?
コメントのリクエストとしてのコード例:
public interface IOperation { ... }
internal class SomeOperation : IOperation
{
public SomeOperation(A a, B b, C c) {...}
}
public abstract TestOperationCommon<T, A, B, C>
where T : IOperation
where ...
{
protected abstract T Create(A a, B b, C c);
[TestMethod]
public void TestCommonOperationBehavior()
{
var op = Create(Mock.Of<A>(), Mock.Of<B>(), Mock.Of<C>);
...
}
}
[TestClass]
public class TestSomeOperation : TestOperationCommon<SomeOperation, ...>
{
[TestMethod]
public void TestSpecificSomeOperationStuff() {}
}