2016-11-25 16 views
0

モジュラー構造の最近のプロジェクトは、メインアセンブリ(名前はappとしましょう)と複数のdata-providerで構成されています。各プロバイダは別々のリポジトリにあり、基本的なインタフェース(例:IDataProvider)を実装しています。どの人も、自分のプロバイダを実装することができます。 appリポジトリにある主な機能のテストスイート(NUnit 3.5)を作成しました。そしてそれはそれぞれdata-providerで実行されるべきです。このテストスイートは、プロバイダが正しく実装されるようにします。Visual Studio Test Runnerの外部テストスイートアセンブリからNUnitテストを実行

したがって、特にdata-providerから外部テストアセンブリを実行する必要があります。もちろん、環境変数、ランナー引数などがありますが、私はVisual Studio Test RunnerをUIから表示し実行する手がかりがありません。

Git SubmodulesまたはGit Subtreesは、別のdata-providerリポジトリからメインのappリポジトリへのリンクを維持するのに役立ちます。しかし、このアプローチにはいくつかの追加の警告があります。

私はこのような問題に直面するのは初めてではないことは明らかです。あなたの経験を共有してください。

EDIT

私は質問を明確にしようとするでしょう。以下は "main-app"リポジトリにある "app"のコードです。

// repository "main-app" 
namespace MainApp 
{ 
    public interface IDataProvider 
    { 
     string Concat(params string[] arg); 
    } 
} 
namespace MainApp.Tests 
{ 
    [TestFixture] 
    public class SampleTests 
    { 
     [Test] 
     public void GetDataTest(IDataProvider provider) 
     { 
      Assert.AreEqual("ab", provider.Concat("a", "b")); 
     } 
    } 
} 

そしてここプロバイダ実装である(別のリポジトリに存在する)

// repository "simple-provider" 
namespace MainApp.SimpleProvider 
{ 
    public class SimpleProvider : IDataProvider 
    { 
     public string Concat(params string[] arg) 
     { 
      return string.Concat(arg); 
     } 
    } 
} 

SimpleProviderプロジェクトがコンパイルさMainApp.dllMainApp.Tests.dllへの参照をconatins。 Visual Studio Test Runnerを使用してSimpleProviderプロジェクト内のMainApp.Tests.dllからテストを実行する必要があります。

+0

説明のために必要なスクリーンショットを示してください。言葉は単純に乾いている。 –

答えて

0

データプロバイダを作成するユーザーに出荷できるTestInfrastructure dllの作成をお勧めします。次に、ユーザーは、基本クラスを継承して共通テストを実行するテストクラスを作成できます。

namespace MainApp.SimpleProvider.Tests 
{ 
    [TestFixture] 
    public class SimpleProviderTests : DataProviderTests 
    { 
     // Add here specific tests if you want. 
    } 
} 

何らかの型にキャストしてテストを実行する場合は、ジェネリックを使用できます。または、データプロバイダのインスタンスを返す抽象メソッドを作成し、プロバイダの作成者にインスタンス化を処理させることができます。

+0

これはうまくいくかもしれませんが、そのようなアプローチでは、各データプロバイダプロジェクトのすべてのテストフィクスチャの複製(少なくとも子クラスとして)が必要です。メインテストアセンブリの変更の場合、継承されたテストは矛盾します(新しく追加されたテストフィクスチャは、クラスが実装されていなければ実行されません)。それはまさに私が避けようとしていることです。 しかし、それは興味深い考えです。 Reflection.Emitを使用して継承した子テストクラスを作成しようとします。したがって、子テストクラスは完全に起源に依存しません。 – kreig

関連する問題