抱歉,如果这是重复的;我保证我确实搜索过。
我正在使用 Visual Studio 2010 Professional 中的 NUnit 进行 C# 集成测试项目,并使用 Resharper v6.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);
在此先感谢您的帮助!另外,如果我只是错过了一些非常愚蠢的东西,我深表歉意。我只很少使用正则表达式,所以这当然是可能的。