1

私は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);
4

3 に答える 3

1

プロジェクトで.exebinを参照することはお勧めできません。-環境パス変数にmplexのパスを設定します-cmdからmplexを呼び出します(つまり、shellexecuteの引数コマンドラインとしてmplexです)よろしくお願いします

于 2012-07-22T08:10:09.583 に答える
1

.exeはC#でコンパイルされたコードであり、コードのエントリポイントを説明する追加のヘッダーがあることを除いてdllに似ています。

私は次の手順を実行しました、そしてそれは私のために働きました。

1-静的メソッドMainと非静的メソッドを使用してexeを作成しました

namespace TestConsole1
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.Write("hello 1st");
        }

        public void TestMethod2()
        {
            Console.Write("hello 2nd");
        }
    }
}

2-プロジェクト参照として別のクラスライブラリプロジェクトで参照し、次のコードは正常に機能しました。

TestConsole1.Program prg = new TestConsole1.Program();

prg.TestMethod2();

また、exe名を「some.exe」から「some.dll」に変更して、プロジェクトで参照したところ、問題なく動作しました。

于 2012-07-22T06:27:28.227 に答える
1

mstestは、ビン外の単体テストを実行しません。テストと参照されるアセンブリを、通常はソリューションディレクトリのTestResultsの下にあるテスト展開フォルダーにコピーします。私は同様のコンポーネントを「単体テスト」しており、常に展開機能を使用する必要があります。これは、非常に単純なものに使用する場合の頭痛の種ですが、ここで説明します。

まず、テスト設定でデプロイメントを有効にする必要があります。testsettingsファイルに移動し、[デプロイメント]タブを選択して、[デプロイメントを有効にする]をクリックします。ソリューションの構造に応じて、ここにmplexファイルを追加できます。私たちのプロジェクトでは、必要なファイルがテストのソース管理ツリーの外にあることが多く、VSが文句を言うので、そうしません。その場合は、以下で説明するファイルリンクを使用してください。

特定のテストまたはテストクラスにDeploymentItem属性を追加することもでき、それらのテストが実行された場合にのみファイルがコピーされます。これは、常にコピーしたくない大きなデータファイルの場合に役立ちます。

必要なファイルがテストソリューションの外部にある場合は、必要なファイルをリンクとしてテストプロジェクトに追加し、ビルドアクションを常にコピーするように設定します。次に、テスト設定でデプロイされたファイルに追加するか、DeploymentItem属性を使用します。

于 2012-07-22T07:45:02.667 に答える