Jad*_*ias 54 regex tdd unit-testing
我是TDD的新手,我发现RegExp非常特殊.是否有任何特殊的单元测试方法,或者我可以将它们视为常规功能?
Rob*_*t P 87
你应该总是测试你的regexen,就像任何其他代码块一样.它们是一个最简单的函数,它接受一个字符串并返回一个bool,或者返回一个值数组.
以下是关于为regexen设计单元测试时要考虑什么的一些建议.这些并不是单元测试设计的硬性和快速处方,而是一些塑造您思路的指导方针.与往常一样,将测试需求与故障成本进行权衡,并与实施所有测试所需的时间进行权衡.(我发现"实施"测试很容易!: - ])
需要考虑的要点:
对于返回列表的正则表达式,还要记住:
(?<name> thing1 ( thing2) )
) - 根据您正在使用的正则表达式引擎,此行为可能会有所不同.如果您使用任何高级功能(例如非回溯组),请确保完全了解该功能的工作原理,并使用上述指南,构建适用于每个功能的示例字符串.
根据您的正则表达式库实现,捕获组的方式也可能不同.Perl 5有一个'open paren order'排序,C#部分除了命名组等等.确保尝试你的味道,以确切知道它的作用.
然后,将它们与其他单元测试集成在一起,可以放在自己的模块中,也可以放在包含正则表达式的模块旁边.对于特别讨厌的regexen,您可能会发现需要大量的测试来验证您使用的模式和所有功能是否正确.如果正则表达式构成了该方法正在进行的大量(或几乎所有)工作,我将使用上面的建议来设置输入以测试该函数而不是直接使用正则表达式.这样,如果您以后决定正则表达式不是要走的路,或者您想要将其分解,您可以捕获正则表达式提供的行为而无需更改接口 - 即调用正则表达式的方法.
只要您真正了解正则表达式功能如何适用于您的正则表达式,您应该能够为它开发合适的测试用例.只要确保你真的,真的,真的了解这个功能是如何工作的!
Jon*_*eet 11
只需抛出一堆值,检查您是否得到了正确的结果(无论是匹配/不匹配还是特定的替换值等).
重要的是,如果有任何角落情况,您怀疑它们是否有效,请在单元测试中捕获它们并在注释中解释它们的工作原理.这样,想要更改正则表达式的其他人将能够检查角落案例是否仍然有效,并且它会给出一个提示,如果它破坏了如何解决它.
据推测,您的正则表达式包含在类的方法中.例如:
public bool ValidateEmailAddress( string emailAddr )
{
// Validate the email address using regular expression.
return RegExProvider.Match( this.ValidEmailRegEx, emailAddr );
}
Run Code Online (Sandbox Code Playgroud)
您现在可以为此方法编写测试.我想关键是正则表达式是一个实现细节 - 您的测试需要测试接口,在这种情况下只是验证电子邮件方法.
归档时间: |
|
查看次数: |
14976 次 |
最近记录: |