2017-12-01 10 views
0

静的試合で期待値と実際の値との差が何であるかを私が代わりactualString値のexpectedRegexPattern値を渡し、expectedRegexPatternの代わりactualString値を渡すときの違いは何Assert.Matches()

public static void Matches(string expectedRegexPattern, string actualString); 

あります値?

ウェイ1から2Assert.Matches("EN", result[0].LanguageCode);

ウェイ -Assert.Matches(result[0].LanguageCode,"EN");

同じ性能で同じ仕事をしている方法のいずれも。だから、上記の方法と、どちらが最善の方法の違いについて混乱していますか?

+0

もちろん、両方とも 'x == y' ==>' y == x'と同じです。しかし、疑問はちょうど:あなたの*予想*行動であり、あなたは実際に何を得るのですか*。それは2つのパラメータが意味するものです。 – HimBromBeere

+1

最初のパラメータは**あなたが期待している**です。 2番目はあなたのユニットテスト**が実際に得たものです**。たとえば、Assert.AreEqualを取る。 'Assert.AreEqual(4,2)'と 'Assert.AreEqual(2,4)'を実行するとどうなるか比較してください。返されるメッセージは異なります。 – mjwills

+0

「何が最善のものなのか」を完全にクローズすることは、テストする内容に完全に依存しています。 – HimBromBeere

答えて

2

私はそこでその方法を見つけたので、あなたがテストフレームワークとしてxunitを使用していると思います。したがって、両方の文字列が同じコンテンツを持っているかどうかだけを確認したい場合は、Assert.Equal("Your text", "Your text")を使用することもできます。 Assert.Matchesメソッドは、テキストが希望の形式であるかどうかを検証するために使用されます。形式は.netの正規表現で記述されます。たとえば、この電話Assert.Matches("^[0-9]$", "1")を使用すると、文字列が0から9までの数字であるかどうかを確認できます。パラメータの順序をAssert.Matches("1", "^[0-9]$")に変更すると、メソッドは例外をスローし、テストは失敗とマークされます。

+0

すべては大丈夫です..しかし、 '0-9'の構文は正しいですか? –

+0

さて、私は最初の投票であなたにあげます...スタックオーバーフローへようこそ –

+0

ありがとうございました。うん、あなたは間違いがあった。私はそれを正しました。ヒントとして、FluentAssertions Nugetパッケージを使用してテストの可読性を高めることを推奨します。そのパッケージを使用すると、 'stringToCheck.Should()'と書くことができます。 'Assert.Equal( "value"、stringToCheck)'の代わりにBe( "value") ' –

2

@Stiviは、Matchesの場合の重要な違いを正しく指摘していますが、Equalsやその他のアサーション方法でさえも、それほど重要ではありませんが重要な違いがあります。

テストログの出力に間違ったメッセージが表示されることがあります。予想::{のexpectedValue}、実際:。あなたがそれらを切り替えるので、もし{実際の値}」

を、あなたが見たい、多くのテストフレームワークは、以下のような

値が一致しないエラーを記録します間違った値が、潜在的な問題を診断しようとする人を混乱させ、「期待」

は、一例として、このテストを取る:。

void TestValueIsZero(): 
{ 
    int value = 1; 
    Assert.Equals(0, value); 
    // logs "Values to not match. expected: 0, actual: 1 
    Assert.Equals(value, 0); 
    // logs "Values to not match. expected: 1, actual: 0 
} 

誰かが失敗を見てスイッチされたパラメータのためにログの誤った "期待"値と "実際の"値が混同される可能性があります。 (2つのオブジェクトを比較し、差異が見つからない場合はtrueを返します)にかかわらず、パラメータの順序を厳密に同じであってもよい

メカニックが、セマンティクスはまだ重要です。