Validation 单元测试-我应该测试参数验证代码吗

Validation 单元测试-我应该测试参数验证代码吗,validation,unit-testing,arguments,Validation,Unit Testing,Arguments,我总是验证论点。我只是从单元测试开始。我是否应该添加一些测试来验证是否针对无效参数引发了异常 例如,假设一个整数参数应该在3..5范围内。然后我有一个验证,如果异常值低于3或高于5,就会抛出一个超出范围的异常,但现在我必须编写额外的两位测试用例-两个验证抛出的异常值低于3或大约为5,一个测试用例验证所有参数有效时不会抛出异常 我被撕裂了——“魔鬼和天使在我肩上”情况:)。“没有人因为选择I.B.M.而被炒鱿鱼。”逻辑上说:“有人会传递一个无效的论点。你已经投入了努力来验证这是通过验证论点来处理的

我总是验证论点。我只是从单元测试开始。我是否应该添加一些测试来验证是否针对无效参数引发了异常

例如,假设一个整数参数应该在3..5范围内。然后我有一个验证,如果异常值低于3或高于5,就会抛出一个超出范围的异常,但现在我必须编写额外的两位测试用例-两个验证抛出的异常值低于3或大约为5,一个测试用例验证所有参数有效时不会抛出异常

我被撕裂了——“魔鬼和天使在我肩上”情况:)。“没有人因为选择I.B.M.而被炒鱿鱼。”逻辑上说:“有人会传递一个无效的论点。你已经投入了努力来验证这是通过验证论点来处理的。再多做一点,为每个论点投入一些测试案例来验证你的论点验证是否有效。”

但实际逻辑是这样的——“这是一个沉重的负担。验证代码本身就是一种保险。在验证上添加测试用例是一种浪费,增加了另一层保险”

我该怎么办


因此,我的问题是:“我是否应该为每个公共方法的每个参数编写测试用例来验证参数验证代码是否确实有效?

是的,您应该这样做。这正是一种非常适合单元测试的场景:一个带有几个可能输入的小操作

说你必须为每个论点这样做是不同的:只为那些对它们执行了一些逻辑的论点这样做

理想情况下,您希望在测试中反映每个需求:“如果字符串为null,则抛出argumentexception”应该具有相应的单元测试

我同意这些测试编写起来很琐碎,但它们会给你很大的保证,让你的代码的基础做他们应该做的事情。当然,如果您只是复制它并在需要的地方更改一些值,它们也会非常快地写入


验证代码是保险,但它是保险的重要组成部分:如果验证不起作用,您的程序将进入未指定的领域。确保保险有效。

谢谢你的回答,但我没有理解逻辑问题:什么样的参数没有对它们执行逻辑?你在公共方法中的所有参数都对它们执行了验证吗?有时只允许每个值(例如
GetById(int-id)
),所以在没有进行验证的情况下没有什么可测试的。实际上,这更像是一个迂腐的注释:只需测试代码的每个执行路径,这些路径自然会归结为具有验证的参数。