Assert.Matches()中预期值和实际值之间的区别是什么

时间:2017-12-01 12:28:50

标签: c# unit-testing moq assert

静态匹配是

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

当我传递expectedRegexPattern值而不是actualString值并传递actualString值而不是expectedRegexPattern值时,有什么区别?

方式1 - Assert.Matches("EN", result[0].LanguageCode);

方式2 - Assert.Matches(result[0].LanguageCode,"EN");

  

两种方式相同的工作具有相同的性能。所以我对上述方法与哪一方最好之间的区别感到困惑?

2 个答案:

答案 0 :(得分:2)

我希望你使用xunit作为测试框架,因为我在那里找到了那个方法。因此,如果您只想检查两个字符串是否具有相同的内容,您也可以使用Assert.Equal("Your text", "Your text")Assert.Matches方法用于验证文本是否为所需格式。格式由.net正则表达式描述。例如,通过此调用Assert.Matches("^[0-9]$", "1"),您可以检查字符串是否为0到9之间的数字。如果将参数的顺序更改为Assert.Matches( "1", "^[0-9]$"),则该方法将引发异常并且您的测试将被标记失败了。

答案 1 :(得分:2)

@Stivi在Matches的情况下正确地指出了显着的差异,但即使对于Equals和其他断言方法,也存在另一个不太重要但仍然重要的区别。

您可能会在测试日志输出中收到错误消息。许多测试框架将记录错误,例如

  

值不匹配:expected:{expectedValue},actual:{actualValue}"。

所以,如果你换了它们,你就会看到错误的"期待"价值,可能会使某人试图诊断问题而感到困惑。

以此测试为例:

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
}

查看失败的测试日志的人可能会被错误的"预期"和"实际"由于切换参数而导致的日志值。

mechanics 可能完全相同,无论参数的顺序如何(比较两个对象,如果没有找到差异则返回true),但语义仍然是重要的。