4

共有の基本インターフェース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() {}

}
4

1 に答える 1

1

テストラッパークラスを作成していただけますか?

何かのようなもの:

[TestClass]
public class AnnoyingTestSomeOperationWrapper
{

    [TestMethod]
    public void TestSpecificSomeOperationStuff() 
    {
        new TestSomeOperation().TestSpecificSomeOperationStuff()
    }

}

internal class TestSomeOperation : TestOperationCommon<SomeOperation, ...>
{
    public void TestSpecificSomeOperationStuff() {}

}
于 2015-08-14T16:54:21.260 に答える