代码之家  ›  专栏  ›  技术社区  ›  Ramesh Rajendran

Assert中预期值和实际值之间的差异是什么。匹配()[关闭]

  •  0
  • Ramesh Rajendran  · 技术社区  · 7 年前

    静态匹配是

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

    当我经过的时候有什么区别 expectedRegexPattern 值而不是 actualString 价值与传递 实际字符串 值而不是 预期Regexpattern 价值

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

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

    这两种方法以相同的性能完成相同的工作。因此,我对上述方法之间的差异感到困惑,哪种方法最好?

    2 回复  |  直到 7 年前
        1
  •  3
  •   D Stanley    7 年前

    @Stivi正确地指出了在以下情况下的显著差异: Matches ,但还有另一个不那么重要但仍然重要的区别,即使对于 Equals 和其他断言方法。

    测试日志输出中可能会出现错误消息。许多测试框架都会记录错误,例如

    值不匹配:预期:{expectedValue},实际:{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
    }
    

    查看失败测试日志的人可能会被由于切换参数而导致的日志中不正确的“预期”和“实际”值所混淆。

    这个 机械师 无论参数的顺序如何,都可能完全相同(比较两个对象,如果没有发现差异,则返回true),但 语义学 仍然很重要。

        2
  •  2
  •   Stivi C.    7 年前

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

    推荐文章