Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 单元测试范围_Unit Testing - Fatal编程技术网

Unit testing 单元测试范围

Unit testing 单元测试范围,unit-testing,Unit Testing,假设我们有一个远程服务Alpha,其方法是GetUser(id,includePurchases)。 该方法具有以下规则: -如果includePurchases为true,则user.Purchases应该有一个购买列表。 -否则,user.Purchases应为空 假设我们有一个网站Beta版,其用户存储库有一个方法GetUser(id,includePurchases)。 Beta.UserRepository.GetUser()在内部调用Alpha.GetUser() 负责Alph

假设我们有一个远程服务Alpha,其方法是GetUser(id,includePurchases)。
该方法具有以下规则:

-如果includePurchases为true,则user.Purchases应该有一个购买列表。
-否则,user.Purchases应为空

假设我们有一个网站Beta版,其用户存储库有一个方法GetUser(id,includePurchases)。
Beta.UserRepository.GetUser()在内部调用Alpha.GetUser()


负责Alpha的团队说Beta应该有一个测试来检查这个特殊规则。
我不同意,因为如果你有一个调用服务的单元测试,那就是一个集成测试

他们不希望Beta测试调用Alpha,而是希望模拟Alpha.GetUser方法的测试包含“if(includePurchases)user.Purchases=new List()”之类的内容 有了这个“if”,就会编写一个测试来断言user.Purchases是否为空,这取决于includePurchases标志


这对你有意义吗?
他们想要的测试,这不应该仅仅是Alpha单元测试的问题吗?

对我来说,似乎我正在编写一个测试来检查关于Alpha工作方式的假设。

从组件化的角度来看,这听起来非常正常和合法,是的,您是对的,实际上调用Alpha服务的Beta单元测试是一个集成测试

请记住,如果您正在为Beta的功能编写单元测试,那么您只需对Beta和Beta负责。模拟Alpha服务调用是合适的,而且更可取,因为单元测试应该假设这些外部依赖项完全按照广告的方式工作


通过模拟Beta版的功能,您可以保证一个可重复且一致的单元测试,只验证Beta版的功能。这样,如果测试过程在环境中失败,并且您的单元测试通过,那么Alpha web服务肯定存在问题,然后其他团队负责解决并修复此错误。

附带说明,我有种感觉,也许您正遭受着典型的组件化开发问题的困扰,即依赖于一个有缺陷的垃圾组件,并且由一个拒绝接受他们的完美代码可能有问题的团队维护。但是当然,你也有针对你的bug,因为QA看不到Alpha的问题。这是面向组件的软件开发的一个典型问题。在建房子的时候,顾客会抱怨屋顶倒塌时屋顶没有屋顶吗?