在集成测试中模拟是否被认为是一种很好的做法?[已关闭]

2022-09-02 23:42:21

有人告诉我@Mock通常仅用于单元测试,但我认为对于替换测试类之外的外部部件很有用。在集成测试中模拟是否正确?


答案 1

最后,这完全取决于措辞。

当你从最基本的意义上思考“正确”时,就像在正确性中一样,那么答案很简单:不。

您会看到,集成测试的目标是确保您的集成系统(由多个不同的组件组成)按预期运行。集成测试的目的是验证组件的“管道”是否按预期工作。因此:当系统的某些部分被模拟出来时,您无法验证系统是否正常工作。

但是,你可以不那么严格地思考“正确性”。

例如:销售汽车的公司必须测试ECU。基本上是一个硬件,运行一个潜在的巨大的软件堆栈。这些ECU通常在汽车内运行。因此,当您想要集成测试ECU时,您必须将ECU放入汽车中进行测试,对吗?一辆可能还不存在的汽车。这里的解决方案是:有硬件模拟器。您将ECU插入该仿真器,ECU就会“思考”位于真实汽车内部。

所以:有很好的论据可以声称“真正的集成测试不能使用模拟”,但与此同时,在现实世界中,这种“模拟”总是发生。

因此,真正的答案是:这取决于上下文。因此,没有一个普遍的答案。相反,这是关于沟通的。您“简单地”必须确保您的组/组织中的所有人都对这些术语有相同的理解。

该术语本身可以用不同的方式解释。你(共同!)选择最适合你需求的定义,然后确保所有参与你项目的人都分享这个观点(或者至少知道它)。


答案 2

是的,在某些情况下,您可以在集成测试中使用(主要用于存根)。特别是如果你想集成测试你班级的一部分。@Mock

例如,如果要测试与外部服务 A 的通信,则模拟与服务 B 通信相关的其余服务没有错。

另一个例子,如果您测试一个工作流,那么通过模拟单个步骤/活动来测试路径的集成测试是有意义的。

个人意见(有争议,有许多不同的术语):单元和集成测试有很多色调。在我的理解中,单元测试只是单独测试单个类。但是我经常编写测试,测试几个类的组合,在我看来,这已经是一种集成测试。然后有一些测试可能通过模拟外部服务来测试单个组件,我称之为系统测试。然后可能会有针对未模拟的外部服务测试单个组件的测试,我将这些测试称为系统集成测试。在所有这些场景中,模拟/存根某些部分并专注于单个测试类中的一个方面可能是可行的。


推荐