6

VS 単体テスト フレームワークを使用して、すべてのコードが正しく機能していることを確認することになっています。ただし、コマンドライン引数が必要なテストを取得するのに多くの問題があります(コマンドライン入力は実行時に指定する必要があるため...そして単体テストでは実際の「実行時」はありません)。コマンドライン引数の入力で単体テストを実行する方法はありますか? これはプログラムを作成する理想的な方法ではないことに気付きましたが、残念ながら、テスト プロセスがどのように機能するかはわかりません。

バッチ ファイルを作成して MStest/testcontainer フォルダーに含めることができる可能性があることを読みました。ただし、このようにするためにクリアしなければならないハードルがいくつかあります。これらのハードルは次のとおりです。

1) バッチファイルについて何も知らない

2) MStest/testcontainer フォルダーの場所、アクセス方法、動作方法、ファイルの追加方法さえわかりません (非表示になっているか、簡単にアクセスできないため)。

3) バッチ ファイルが MStest/testcontainer フォルダーに正しく記述されていたとしても、バッチ ファイルをどうするかわかりません。私のテストは、そこから入力を取得するどころか、そこにあることをどのように知ることになっているのでしょうか?

要約すると、VS単体テストでコマンドライン引数を取得するにはどうすればよいですか? バッチ ファイル方式を使用する必要がある場合は、私が 5 歳のときのように説明していただければ幸いです。この特定のコンテキスト内でこれらのものがどのように機能するか。

ありがとうございます。

4

2 に答える 2

2

短い、あなたの問題を解決し、ユニットテストへの間違ったアプローチ:-):

プログラムにコマンド ライン引数が必要な場合は、static void Main(string[] args)メソッドが必要です。

通常追加するコマンドライン引数でこのメソッドを呼び出す単体テストを作成するだけです。

より長く、より良い方法: Yout 機能を 2 つに分割します。つまり、作業を行うクラスと、コマンド ライン引数を取得してワーカーに渡す単純なプログラムです。

書き込み 2 単体テスト - Main(xxx) が実際にクラスに引数を渡すこと、および実際のワーカーがこれらの引数に基づいてその動作を検証するための多くの単体テスト。

于 2013-07-15T16:26:35.053 に答える
0

Process クラスを使用して、テスト メソッド内でプログラムの新しいインスタンスを開始できます。何かのようなもの:

Process prop = new Process();
prop.StartInfo.FileName = "myProgram.exe";
prop.StartInfo.Arguments = "-arg1 -arg2";
prop.StartInfo.RedirectStandardOutput = true;
prop.StartInfo.RedirectStandardInput = true;
prop.Start();
// You can then use prop.StandardInput and prop.StandardOutput for testing.
prop.WaitForExit();
int code = prop.ExitCode;
于 2013-07-12T21:56:05.727 に答える