私はAPIの複数のバージョンを持ついくつかのソフトウェアにAPI用のラッパーライブラリを作成しています。同時に複数のプラットフォーム間で多数の共有呼び出しが同時に作成されています。時間がたつにつれて、同じコードベースを使用するプラットフォームを、異なる名前空間& * .exeビルドのまさにマージしています。NUnitとNCrunchを使用してプリプロセッサディレクティブで複数のビルド構成をテストできますか?
私は、単一のコードベースを作成し、プリプロセッサディレクティブと条件付きコンパイルシンボルを使用してビルド設定を行い、ビルドに特定のコードを選択的に使用することでこれを行います。コードの約90%は、バージョンとプラットフォームの間で文字通り再利用できるため、参考になります。テスト中のプロジェクトではすべて正常に動作します。
しかし、NUnit & NCrunchのユニットテストに問題があります。正しい定数をロードし、統合テストプロジェクトの正しいビルドフォルダを作成するために、同じビルド構成を作成しました。
NUnitのは、統合テストプロジェクトのプリプロセッサ命令を無視しているように見える。しかし、私は2つの奇妙な問題に気付いています。たとえば、次の例では、Visual Studioでは目的の行セット(現在の構成変数に対応)が表示されていても、構成に関係なく(BUILD_Bar_2015 = trueなど)、最初の行のコードが常にヒットします(BUILD_Foov16 = true) )アクティブな唯一のものです:
[TestFixture] public class FooBarIncApplicationTests { #if BUILD_Foov16 public const string path = @"C:\Program Files (x86)\FooBarInc\FooV16\Foo.exe"; #elif BUILD_Foov17 public const string path = @"C:\Program Files (x86)\FooBarInc\FooV17\Foo.exe"; #elif BUILD_Bar_2013 public const string path = @"C:\Program Files (x86)\FooBarInc\Bar 2013\Bar.exe"; #elif BUILD_Bar_2015 public const string path = @"C:\Program Files (x86)\FooBarInc\Bar 2015\Bar.exe"; #endif [Test] public void FooBarIncApplication_Initialize_New_Instance_Defaults() { using (FooBarIncApplication app = new FooBarIncApplication(path)) { ... } } }
さらに、私がNCrunchてテストを実行すると、それだけで(例えばそれが記載されている第一の構成で作成されたビルドに対応する* .dllファイルを使用しているようですFoo.exe v16用にコンパイルされた* .dllを常にテストしてください。
これらの2つの問題ar電子関連。私はNUnitやNCrunchがそのような設定を処理できないのだろうか、あるいはこの独特な設定を扱うべきである特定の方法があるかどうか疑問に思っていますか?
私の大きな問題は#2です。これは、NCrunchが最初の設定から構築された* .dllだけでNUnitを実行しているように見えるため、他の設定をテストすることができません。おそらく、これはプロジェクトの依存関係に問題がありますか? (上の例のパスは、私がAPIを介してやりとりしているプログラムですが、私の* .dllプロジェクトではありません)
たぶんソリューションは、そこに見つけることができます。私の大きな問題は#2です。これは、NCrunchが最初の設定から構築された* .dllだけでNUnitを実行しているように見えるため、他の設定をテストすることが不可能になります。おそらく、これはプロジェクトの依存関係に問題がありますか?上記の例のパスは、私がAPIを介してやり取りしているプログラムであり、私の* .dllプロジェクトではありません。 – PellucidWombat