特定の結果が正しいことを確認する単体テストを作成しようとしています。ただし、正しいと見なされる結果は2つあります。アサーションでORを実行する方法はありますか?結果=x||を実行できることを知っています 結果=yであり、これが真であると主張します。しかし、true!= falseを表示するのではなく、結果!=xまたはyを表示したいと思います。
私が使用しているフレームワークはmstestですが、nunitの提案も聞くことができます。
特定の結果が正しいことを確認する単体テストを作成しようとしています。ただし、正しいと見なされる結果は2つあります。アサーションでORを実行する方法はありますか?結果=x||を実行できることを知っています 結果=yであり、これが真であると主張します。しかし、true!= falseを表示するのではなく、結果!=xまたはyを表示したいと思います。
私が使用しているフレームワークはmstestですが、nunitの提案も聞くことができます。
FluentAssertionsを試すことができます。これは、期待される結果テストをより自然に指定できるようにする.NET拡張メソッドのセットです。Fluent AssertionsはMSTestとNUnitの両方をサポートしているため、後でnUnitに切り替えることは大したことではありません。次に、次のスニペットを使用してアサーションを表現できます。
// Act phase: you get result somehow
var result = 42;
// Assert phase
result.Should().BeOneOf(new [] { 1, 2 } );
// in this case you'll be following error:
// Expected value to be one of {1, 41}, but found 42.
NUnitには、優れた 制約ベースのアサートモデルがあります。複合制約を定義できます。詳細はこちらをご覧ください
あなたの場合、assertは次のように書くかもしれません:
Assert.That(result, Is.EqualTo(1).Or.EqualTo(5));
失敗したテストメッセージは次のようになります(例):
期待される:1または5
しかし、だった:10
実際の結果が3つ以上の期待値と一致する可能性がある場合は、Assertメソッドを作成できます。
public void AssertMultipleValues<T>(object actual, params object[] expectedResults)
{
Assert.IsInstanceOfType(actual, typeof(T));
bool isExpectedResult = false;
foreach (object expectedResult in expectedResults)
{
if(actual.Equals(expectedResult))
{
isExpectedResult = true;
}
}
Assert.IsTrue(isExpectedResult, "The actual object '{0}' was not found in the expected results", actual);
}
できるよ:
Assert.IsTrue( result == x || result == y );
最も簡単なオプションは、を使用することAssert.IsTrue
ですが、失敗時に文字列メッセージを渡して印刷することもできます。その文字列は、現実がどのように期待に応えられなかったかについての情報を与えることができます。
Assert.IsTrue(result == x || result == y, "Result was not x or y");
カスタムメッセージに実際の値を簡単に含めることもできます。
Assert.IsTrue(result == x || result == y, "Result was not x or y, instead it was {0}", result);
または、「正しい」値をコレクションに保存してから、を使用することもできますCollectionAssert.Contains
。