【发布时间】:2011-06-16 12:38:30
【问题描述】:
假设我们有一个远程服务 Alpha,其方法是 GetUser(id, includePurchases)。
该方法具有以下规则:
- 如果 includePurchases 为真,user.Purchases 应该有一个购买列表。
- 如果不是,user.Purchases 应该是空白的。
假设我们有一个网站 Beta,其 UserRepository 有一个 GetUser(id, includePurchases) 方法。
Beta.UserRepository.GetUser() 在内部调用 Alpha.GetUser()。
负责 Alpha 的团队表示,Beta 应该有一个测试来检查该特殊规则。
我不同意,因为如果你有一个调用服务的单元测试,那就是集成测试。
他们不希望 Beta 测试调用 Alpha,而是希望模拟 Alpha.GetUser 方法的测试包含类似“if (includePurchases) user.Purchases = new List()”的内容。
有了这个“如果”,将编写一个断言 user.Purchases 是否为空的测试,具体取决于 includePurchases 标志。
这对你有意义吗?
他们想要的测试,不应该只是 Alpha 单元测试的问题吗?
对我来说,似乎我正在编写一个测试来检查关于 Alpha 工作方式的假设。
【问题讨论】:
-
在旁注中,我觉得您可能正遭受经典的组件化开发问题,即依赖一个有缺陷的垃圾组件,并且由一个拒绝接受他们完美的团队维护的组件代码可能有问题。但是,当然你有针对你的错误,因为 QA 看不到 Alpha 的问题。这是面向组件的软件开发的典型问题。盖房子的时候,客户会不会去向屋顶工抱怨地基坍塌时没有屋顶?
标签: unit-testing