繁体   English   中英

单元测试有效字符的最佳实践

[英]Best Practice for Unit Testing valid characters

假定一个方法接受一个字符串作为输入参数,并且该字符串必须只包含1到8之间的数字和短划线(“/”)。

在开发测试驱动时,您将如何编写单元测试来验证该方法是否进行了正确的参数检查?

我的第一个想法是反转需求并测试ArgumentException,即具有数据驱动单元测试,该测试使用其他所有可能的字符调用该方法并期望ArgumentException。 然而,......感觉有点像用大锤开裂坚果......

对于那样的情况,有没有最佳做法?

我的第一个想法是颠倒了需求并测试了ArgumentException

这是函数应该做的第一件事。 如果它是一个公共函数,那么它应该假设它的参数是无效的,除非另有证明。 您声明的要求很容易通过正则表达式检查覆盖 - 如果正则表达式失败则抛出ArgumentException或OutOfRangeException。

你将如何编写一个单元测试来验证该方法是否进行了适当的参数检查

您需要两种重复调用目标函数的测试方法。 对于第一个有一堆带有有效参数的调用,并确保检查返回值是否有。
对于第二个测试方法,它会触发一堆无效输入,包括带有特殊字符,大写和小写等的字符串,无效输入应该触发异常,这会导致测试失败(你需要用这个方法来装饰这个方法)预期的异常属性)。

您可以尝试数据驱动的单元测试(MSDN: 如何:创建数据驱动的单元测试 )。

这允许您定义XML,CSV或数据库表等数据源,并将几种可能的输入放入其中。 单元测试只写入一次,但每个数据行在源中执行一次。

您可以填充,例如包含一些有效输入字符串的CSV文件并进行测试,另一个包含一些无效字符串的CSV文件,其中测试方法检查[ExpectedExcetion(typeof(...))] (或者您的代码应该执行的任何操作)在这种情况下。)

这很容易实现(参见上面的链接),如果你愿意,你甚至可以随机生成各种格式的数千种输入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM