在单元测试中使用与被测系统中相同的常量是一个好主意吗?

伊利亚·切尔诺莫迪克(Ilya Chernomordik)

想象一下以下方法:

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.EntityNameequals 'ConstantEntityNameValue'原因:文字是规范的一部分,因此客户端代码可能会使用它。在文档中有区别,但是,该文档记录了该函数的作用(使用来创建对象Constants.EntityName)以及该常量的值是什么。

C)最后假设您的功能记录如下:

GetEntity将创建一个具有默认内容的新实体。Name将被赋予值'ConstantEntityNameValue'[...]”。

在这种情况下,您应该与'ConstantEntityNameValue'测试中的文字进行比较原因:将编写使用此文字进行比较的客户端代码,因此您应通过测试确保该函数实际上也将该文字用于将来的版本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在单元测试中使用依赖注入对象不是一个好主意吗?

来自分类Dev

在Dart Web服务器中使用同步文件系统方法不是一个好主意吗?

来自分类Dev

使用只读根文件系统是嵌入式安装的一个好主意吗?

来自分类Dev

在外部硬盘上使用压缩的NTFS文件系统是一个好主意吗?

来自分类Dev

对不同的控件使用与事件相同的功能不是一个好主意吗?

来自分类Dev

在Web应用程序中使用反射是一个好主意吗?

来自分类Dev

在rails中使用has_one嵌套属性是一个好主意吗?

来自分类Dev

在动作助手中使用browserhostory.push是一个好主意吗?

来自分类Dev

一个好主意是为此使用复合模式吗?

来自分类Dev

使用NTFS压缩是一个好主意吗?

来自分类Dev

一个好主意是为此使用复合模式吗?

来自分类Dev

使用宏在C中实现通用向量。这是一个好主意吗?

来自分类Dev

使用goto避免深度函数调用中的堆栈溢出是一个好主意吗?

来自分类Dev

使用“ is”检查变量中包含哪个函数是一个好主意吗?

来自分类Dev

通过在脚本末尾使用ROLLBACK来测试SQL脚本是一个好主意吗?

来自分类Dev

在开发过程中使用docker运行前端构建过程不是一个好主意吗?

来自分类Dev

在Rails ActiveRecord模型中,使用after_initialize回调不是一个好主意吗?

来自分类Dev

提取大量String文字是一个好主意吗?

来自分类Dev

组合实例VBO是一个好主意吗?

来自分类Dev

绑定PasswordBox密码不是一个好主意吗?

来自分类Dev

组合实例VBO是一个好主意吗?

来自分类Dev

别名cd推送-这是一个好主意吗?

来自分类Dev

在Entity Framework查询中使用TransactionScope是个好主意吗?

来自分类Dev

在反跳函数中使用requestAnimationFrame是个好主意吗?

来自分类Dev

在Android的Scrollview中使用约束布局是个好主意吗?

来自分类Dev

在 TextInputLayout 中使用 MaterialEditText 是个好主意吗

来自分类Dev

一起使用HtmlCleaner和Jsoup是一个好主意吗?

来自分类Dev

单元测试的assert *的评估版本是否是个好主意?

来自分类Dev

临时扩展Java中的现有对象-这是一个好主意吗?

Related 相关文章

  1. 1

    在单元测试中使用依赖注入对象不是一个好主意吗?

  2. 2

    在Dart Web服务器中使用同步文件系统方法不是一个好主意吗?

  3. 3

    使用只读根文件系统是嵌入式安装的一个好主意吗?

  4. 4

    在外部硬盘上使用压缩的NTFS文件系统是一个好主意吗?

  5. 5

    对不同的控件使用与事件相同的功能不是一个好主意吗?

  6. 6

    在Web应用程序中使用反射是一个好主意吗?

  7. 7

    在rails中使用has_one嵌套属性是一个好主意吗?

  8. 8

    在动作助手中使用browserhostory.push是一个好主意吗?

  9. 9

    一个好主意是为此使用复合模式吗?

  10. 10

    使用NTFS压缩是一个好主意吗?

  11. 11

    一个好主意是为此使用复合模式吗?

  12. 12

    使用宏在C中实现通用向量。这是一个好主意吗?

  13. 13

    使用goto避免深度函数调用中的堆栈溢出是一个好主意吗?

  14. 14

    使用“ is”检查变量中包含哪个函数是一个好主意吗?

  15. 15

    通过在脚本末尾使用ROLLBACK来测试SQL脚本是一个好主意吗?

  16. 16

    在开发过程中使用docker运行前端构建过程不是一个好主意吗?

  17. 17

    在Rails ActiveRecord模型中,使用after_initialize回调不是一个好主意吗?

  18. 18

    提取大量String文字是一个好主意吗?

  19. 19

    组合实例VBO是一个好主意吗?

  20. 20

    绑定PasswordBox密码不是一个好主意吗?

  21. 21

    组合实例VBO是一个好主意吗?

  22. 22

    别名cd推送-这是一个好主意吗?

  23. 23

    在Entity Framework查询中使用TransactionScope是个好主意吗?

  24. 24

    在反跳函数中使用requestAnimationFrame是个好主意吗?

  25. 25

    在Android的Scrollview中使用约束布局是个好主意吗?

  26. 26

    在 TextInputLayout 中使用 MaterialEditText 是个好主意吗

  27. 27

    一起使用HtmlCleaner和Jsoup是一个好主意吗?

  28. 28

    单元测试的assert *的评估版本是否是个好主意?

  29. 29

    临时扩展Java中的现有对象-这是一个好主意吗?

热门标签

归档