繁体   English   中英

TDD中的模拟值

[英]Mocking values in TDD

在《 GOOS 》一书中。 它被告知不要嘲笑值 ,这让我感到困惑。 这是否意味着值没有任何行为?

我对值对象了解不多,但AFAIK值对象是不可变的。 是否可以决定何时创建值对象?

并非所有不可变的对象都是值对象。 顺便说一下,在设计时,请考虑理想对象只有不可变的字段和无参数方法。

关于启发式,一种有效的方法可以考虑如何使用对象:如果您构建实例,则调用一些方法,然后使用它完成(或将其存储在字段中),这可能不是值对象。 相反,如果将对象保留在某种数据结构中并与它们进行比较(与.equals() ),则可能有一个value对象 对于将用于键Map的对象尤其如此。

值对象应该自己进行自动测试(测试很容易读写,因为很简单),但是没有必要对它们进行模拟:模拟接口的主要实际原因是实现类

  • 通常很难建立(需要很多合作者)
  • 运行非常昂贵(访问网络,文件系统等)。

都不适用于值对象。

引用链接的博客文章

当类不值得嘲笑时,有两种启发式方法。 首先,它只具有访问器或简单的方法来对它所拥有的值起作用,它没有任何有趣的行为。 其次,除了VideoImpl或类似的模糊术语之外,您无法想到该类的有意义的名称。

在标题为“不要模拟值对象”的部分的上下文中,第一点的含义是,值对象没有有趣的行为。

暂无
暂无

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

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