これが重複している場合はお詫びします。私は検索したことを約束します。
Visual Studio 2010 ProfessionalでNUnitを使用してC#統合テストプロジェクトに取り組んでおり、Resharperv6.1でテストを実行しています。(Resharper 6.1は、NUnit 2.5.10を使用するように指示しています。これをオーバーライドしようとすると、常に問題が発生します。)
私のテストの一部は、例外メッセージを含め、適切な例外がスローされたことを表明することです。ただし、例外メッセージに、毎回まったく同じであるとは思わないGUIDやその他の情報が含まれている場合があります。これを回避するために、基本的な正規表現パターンを使用して例外メッセージを一致させたいと思います。ここでは、例外メッセージを含め、ワイルドカードを使用して、特定の場所で「この部分は何にでも一致する可能性があります」と言います。以下のシナリオですが、一致するものがないというエラーが発生するたびに。コードの要約:
[Test]
public void ExceptionPatternTest()
{
var patternA = Regex.Escape(@"SQL Code: 2601 Message: Cannot insert duplicate key row in object 'dbo.ResourceCategory' with unique index 'IDX_ResourceTypeResourceCategoryName'.");
var patternB = ".*"; //wildcard
var patternC = Regex.Escape(@"\r\nThe statement has been terminated.");
var pattern = patternA + patternB + patternC;
var thrownException = Assert.Throws(Is.TypeOf(_testException.GetType()),
() => Throw()); //Call method and assert that exception is thrown.
Assert.That(Regex.IsMatch(thrownException.Message, pattern));
}
private void Throw()
{
throw _testException;
}
readonly Exception _testException = new Exception("SQL Code: 2601 Message: Cannot insert duplicate key row in object 'dbo.ResourceCategory' with unique index 'IDX_ResourceTypeResourceCategoryName'. The duplicate key value is (9fec90c1-12b4-42c3-adc0-a0d600b9a8e8, 1, Item Cat 1).\r\nThe statement has been terminated.");
この部分のバリエーションも試してみました。パターンの文字の手動エスケープを含める:
var pattern = @"SQL\ Code:\ 2601\ Message:\ Cannot\ insert\ duplicate\ key\ row\ in\ object\ 'dbo\.ResourceCategory'\ with\ unique\ index\ 'IDX_ResourceTypeResourceCategoryName'\..*\\r\\nThe\ statement\ has\ been\ terminated\.";
また、違いがあった場合に備えて、StringAssertも試しました。
StringAssert.IsMatch(pattern, thrownException.Message);
よろしくお願いします!また、本当に馬鹿げたものが足りない場合はお詫びします。私は正規表現を控えめに扱っただけなので、それは確かに可能です。