想象一下以下方法:
GetEntity => new { Name = Constants.EntityName };
现在,我将进行单元测试以检查我的代码是否返回正确的实体:
var result = GetEntity();
Assert.Equal(Constants.EntityName, result.Name);
要么
var result = GetEntity();
Assert.Equal("ConstantEntityNameValue", result.Name);
现在的问题是,在单元测试中使用相同的常数是否是一个好主意?如果一个人在常量中出错,那么它也会影响单元测试,并且即使有错误也会通过,但是我们可能必须在许多单元测试中重复该字符串。
我想知道是否值得对所有值进行硬编码,或者是否足以使用常量。
PS这些都是无用的裸露示例,仅用于说明想法
问问自己以下问题:如何记录用户的功能?
A)假设您的文档朝以下方向发展:
“
GetEntity
将创建一个具有默认内容的新实体。Name
将获得的内容Constants.EntityName
,这意味着,稍后在代码中,您可以Name
通过与进行比较来检查其默认值是否仍然存在Constants.EntityName
。”
如您所见,在本文档中,没有向用户通知的实际值Constants.EntityName
。实际值无关紧要。在这种情况下,我建议Constants.EntityName
您在测试中也进行比较。原因:实际值无关紧要,并且客户端代码不应关心实际值。
B)相比之下,假设您将功能记录如下:
“
GetEntity
将创建具有默认内容的新实体。Name
将获得的内容Constants.EntityName
,即'ConstantEntityNameValue'
。[...]”。
在这种情况下,我建议至少有两个测试用例:一个测试该Name
属性等于Constants.EntityName
,另一个测试验证该Constants.EntityName
equals 'ConstantEntityNameValue'
。原因:文字是规范的一部分,因此客户端代码可能会使用它。在文档中有区别,但是,该文档记录了该函数的作用(使用来创建对象Constants.EntityName
)以及该常量的值是什么。
C)最后假设您的功能记录如下:
“
GetEntity
将创建一个具有默认内容的新实体。Name
将被赋予值'ConstantEntityNameValue'
[...]”。
在这种情况下,您应该与'ConstantEntityNameValue'
测试中的文字进行比较。原因:将编写使用此文字进行比较的客户端代码,因此您应通过测试确保该函数实际上也将该文字用于将来的版本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句