私はC#4.0を使用しています。
を使用して単体テストを実行していMicrosoft.VisualStudio.TestTools.UnitTesting
ます。
私のUnitTestプロジェクトは、別のプロジェクト、たとえばProjectAをテストします。ProjectAは、次のようなプロセスを作成します。
Process mplex = new Process();
psi = new ProcessStartInfo();
psi.CreateNoWindow = true;
psi.UseShellExecute = false;
psi.RedirectStandardError = true;
psi.FileName = "cmd.exe";
psi.Arguments = "/C mplex omittedForBrevity";
mplex.StartInfo = psi;
mplex.Start();
/* This is telling me: "'mplex' is not recognized
* as an internal or external command, operable
* program or batch file." */
var a = mplex.StandardError.ReadToEnd();
「AppDomain.CurrentDomain.BaseDirectory」(UnitTestプロジェクトの\ bin \ Debug \フォルダー)を含むさまざまなビン内に「MPLex.exe」を配置しました。
MPLex.exeは、基本的にMicrosoftのGPLEXの派生物であり、Flex / LexのC#バージョンです。ProjectAでMPLex.exeへの参照を追加し、オブジェクトブラウザーで表示すると、次のようなメソッドMain
や、それとインターフェイスするパブリックな方法が表示されません。それ以外の場合は、cmdを介して呼び出す代わりにそれを行います。私は上でやった。
ユニットテストが行われているとき、\ bin \Debug\ディレクトリを検索していないことが起こっていると思います。単体テスト以外のProjectBのMainメソッドからProjectAで同じコードを実行すると、正常に機能します。どういうわけか.exeを強く参照して、必要な場所にコピーできるようになれば、問題は解決すると思います。これどうやってするの?
編集:
これを追加すると修正されましたが、まだ知られていない何かを壊した可能性があることを私は知っています。
System.IO.Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);