如果我已经有UI自动化测试,为什么还需要写单元测试?
例如,如果需要检查某个方法对于给定的输入是否可以返回一些输出(例如相加的结果,然后显示在视图中),那么如果我可以通过UI自动化测试来确认视图中的输出是否正确(或不正确),我为什么还需要进行单元测试呢?
如果我已经有UI自动化测试,为什么还需要写单元测试?
例如,如果需要检查某个方法对于给定的输入是否可以返回一些输出(例如相加的结果,然后显示在视图中),那么如果我可以通过UI自动化测试来确认视图中的输出是否正确(或不正确),我为什么还需要进行单元测试呢?
单元测试和端到端测试(UI测试)有不同的目的。
单元测试可以告诉你代码单元(模块、类、函数、接口)是否存在问题。
端到端测试可以告诉你故障如何影响端到端输出。
让我们使用类比来理解为什么我们需要这两个测试。
假设您通过组装不同的组件(如化油器、变速箱、轮胎、曲轴等)制造汽车。所有这些部件都由不同的供应商(即开发人员)制造。
当汽车无法按预期工作时,您需要测试各个组件以找出问题的根源吗?
在组装汽车之前测试组件能够节省时间和精力吗?
通常,您希望在将它们添加到汽车之前确保每个组件都按预期工作(单元测试)。
当汽车无法按预期工作时,您会测试每个组件以查找问题的根本原因。
这通常通过创建一个装配线(CI流水线)来实现。您的测试策略如下:
测试各个组件
测试它们与其他组件接口配合是否正常
在所有组件装配到一起后测试汽车。
这种测试策略是我们在编程中所说的测试金字塔。
阅读以下内容可能会让您更了解:https://martinfowler.com/bliki/TestPyramid.html
即使已经有了自动化测试,为什么你仍然需要单元测试呢?这里有两个原因: