首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单元测试:“如果您正在重构并且没有协作者,这是一种代码味道”?

单元测试:“如果您正在重构并且没有协作者,这是一种代码味道”?
EN

Software Engineering用户
提问于 2012-08-20 17:37:10
回答 1查看 1.6K关注 0票数 10

我在读罗伊·奥舍夫的“单元测试艺术”。我在第7.2节编写了可维护的测试,其中作者有关于代码气味的说明:

注意:当您将内部状态重构为外部测试可见时,是否可以将其视为代码气味(代码设计或逻辑中可能出现错误的迹象)?当您重构以公开协作者时,这并不是一种代码气味。如果您正在重构,并且没有协作者(所以您不需要存根或嘲弄任何东西),这就是一种代码味道。

编辑:作者所说的“合作者”是依赖关系。他的一些依赖项示例是访问数据库或访问OS文件系统的类。这里是他定义存根并开始使用协作者这个词的地方:

存根是系统中现有依赖项(或协作者)的可控替代。

作者没有这个代码气味的例子,我很难理解/想象这会是什么样子。有人能再解释一点吗?也许能提供一个具体的例子吗?

EN

回答 1

Software Engineering用户

发布于 2012-08-20 18:39:06

假设我们有一个域类,并且这个域类具有使用Repository的持久性层的直接知识,它使用这个存储库来公开一个实例级的"Save“方法,处理域类的对象可以调用这个方法来保存所做的更改,而不需要机制方面的知识(这是否”好的“设计是另一天的讨论)。重构类以将该存储库公开为属性和/或构造函数参数,从而允许传递能够确保正确调用的模拟存储库,这对于测试和一般可维护性通常都是一件好事。

现在,这是一个域类,它有状态数据。让我们假设有状态属性之一有一个后备字段,属性访问器根据当前输入测试新输入是否有效(也许新值永远不会比旧输入少)。您需要测试这个验证,但是您发现这样做需要访问后台字段来设置一个初始值,然后尝试覆盖它。这应该是一个危险的标志;如果测试需要访问后台字段(这是实现细节;任何使用者都不应该知道它在那里),那么生产代码如何获得一致的对象呢?如果有一个用于生产代码的方法来执行您的测试所做的同样的事情,那么测试可能会模仿这种方式。如果生产代码没有有效的方法使对象处于这种状态,那么为什么要测试这个场景呢?

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/161619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档