TestDriven.NET でテスト メソッドのパラメーターを指定するにはどうすればよいですか?
-
21-09-2019 - |
質問
NUnit と TestDriven.NET プラグインを使用して単体テストを作成しています。次のようなテストメソッドにパラメータを提供したいと思います。
[TestFixture]
public class MyTests
{
[Test]
public void TestLogin(string userName, string password)
{
// ...
}
...
}
ご覧のとおり、これらのパラメーターはプライベート データであるため、ハードコーディングしたり、ファイルに入れたりしたくありません。本当は書きたくないんだけど どこでも, テストを実行するたびにプロンプトが表示されるようにしたいです。
このテストを実行しようとすると、出力ウィンドウに次のメッセージが表示されます。
テストケース「MyProject.MyTests.TestLogin」は実行されませんでした:引数が指定されていませんでした
そこで私の質問は、これらのパラメータをどのように指定すればよいでしょうか?TestDriven.NET では値を入力できるようにプロンプトが表示されると期待していましたが、表示されませんでした...
私の質問がばかげているように思えたら申し訳ありませんが、答えはおそらく非常に簡単ですが、Googleで役立つものが見つかりませんでした...
編集:たった今やり方を見つけたんですが、汚いやり方ですね…。
[Test, TestCaseSource("PromptCredentials")]
public void TestLogin(string userName, string password)
{
// ...
}
static object[] PromptCredentials
{
get
{
string userName = Interaction.InputBox("Enter user name", "Test parameters", "", -1, -1);
string password = Interaction.InputBox("Enter password", "Test parameters", "", -1, -1);
return new object[]
{
new object[] { userName, password }
};
}
}
私はまだより良い解決策に興味があります...
解決
単体テストは、通常は取らないパラメータ。 作成するのに必要なデータの試験そのものです。
- 予想される値
- お電話のドキュメンタリーにしたい試験合格に必要な引数
- を比較すると、結果が予想される値は、返される値から試験方法
MS単位で試験を許可しないのパラメータ試験までを実施。代わりに作成して頂く必要がございま Datadrivenユニットテスト.のリンクでお手伝いいたします。
として扱っていました。のかを宣言するの通過に引数のユニットテストそのものかと思います。
更新: 若い:).検討Sarfrazの答えではなくどのようにパスパラメータを途試験までを実施。
他のヒント
使用のTestCase の属性ます。
[TestCase("User1", "")]
[TestCase("", "Pass123")]
[TestCase("xxxxxx", "xxxxxx")]
public void TestLogin(string userName, string password)
{
// ...
}
ここにあるNUnit用のRowTestプラグインを使用すると、この問題を解決できると思います http://www.andreas-schlapsi.com/2008/01/29/rowtest-extension-120/
テスト データが [Row] 属性によって提供される単純なデータ駆動テストを作成できます。ここでは、さまざまなパラメーターを使用して何度も実行されるテストの例を示します。
[TestFixture]
public class RowTestSample
{
[RowTest]
[Row( 1000, 10, 100.0000)]
[Row(-1000, 10, -100.0000)]
[Row( 1000, 7, 142.85715)]
[Row( 1000, 0.00001, 100000000)]
[Row(4195835, 3145729, 1.3338196)]
public void DivisionTest(double numerator, double denominator, double result)
{
Assert.AreEqual(result, numerator / denominator, 0.00001);
}
}
私は渡す引数はベストプラクティスではないかもしれないが、ハードいくつかの点で変更される可能性があり資格情報またはサーバーアドレスをコーディングでもないことを他の回答に同意します。
問題の解決策提案に触発され、私は単に代わりに入力ボックスを使用してのコンソール入力を読み込みます。引数は、ファイルに保存されます。テストを開始すると、ファイルがリダイレクトされ、いずれかのテストケースを実行する前に呼び出されるべきいくつかの初期化関数から読み取ることがます。
nunit tests.dll < test.config
これは、ユーザーとの対話を回避し、任意の自動化スクリプトによって実行可能でなければなりません。欠点は、パスワードがまだどこかに保存する必要がありますが、少なくともそれはテスターマシン上でローカルに保存することができ、変更が容易であるということです。
これはテスト(定義によるもの単体テスト)を含むExcelシートは、他の人がコードを変更することなく、大きなサーバ側のプロジェクトのためのテストケースを生成させるために使用されたプロジェクトのためでした。すべてのテストケースは、単一の巨大なExcelシートに強制されなければならなかった場合、それは悪いだったでしょう。また、別のサーバーにはCI、単に多くのテスト環境ではありませんでした。