【问题标题】:Code Coverage and Regular Expressions (dotCover)代码覆盖率和正则表达式 (dotCover)
【发布时间】:2016-02-24 15:52:15
【问题描述】:

我正在使用 dotCover 检查我的代码覆盖率。 在一行中,我使用正则表达式来检查给定字符串是否有效。

if (!Regex.IsMatch(value, @"[a-zA-Z\-]"))
    throw new NullReferenceException("value");

我创建了一个单元测试来检查我的代码是否按预期工作。

但 dotCover 无法识别我的代码已被覆盖。当然因为我不 用每个可能的(不匹配的)字符测试它。

什么是解决这个问题的好方法?

【问题讨论】:

  • 使用否定字符类if (Regex.IsMatch(value, @"[^a-zA-Z-]"))。如果字符不在类中(除了 ascii 字母和连字符),则抛出异常。
  • 好主意@CasimiretHippolyte!
  • 这比描述所有字符串更容易:if (!Regex.IsMatch(value, @"^[a-zA-Z-]*$"))。但请注意,如果需要,您需要检查字符串是否为空。

标签: regex unit-testing nunit code-coverage dotcover


【解决方案1】:

如果要检查字符串是否不包含非 ascii 字母或连字符的字符,可以使用以下模式之一:

带有否定字符类(搜索字符):

if (Regex.IsMatch(value, @"[^a-zA-Z-]"))

没有(描述所有字符串):

if (!Regex.IsMatch(value, @"^[a-zA-Z-]*$"))

如果你也想防止空字符串:

if (Regex.IsMatch(value, @"[^a-zA-Z-]|^$"))

if (!Regex.IsMatch(value, @"^[a-zA-Z-]+$"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 2017-12-29
    • 2018-01-11
    相关资源
    最近更新 更多