如果我有UI自动化测试,为什么需要编写单元测试?
如果我需要检查某个方法是否为给定的输入返回了某些输出,例如在视图中显示的加法结果,为什么我可以进行单元测试,如果我可以确认视图中的输出是通过UI自动化测试正确(或不正确)
答案 0 :(得分:10)
单元测试和端到端测试(UI测试)有两个不同的目的
单元测试告诉您代码单元(模块,类,函数,接口)何时出现问题
端到端测试告诉您该故障如何影响端到端输出。
让我们用一个类比来理解为什么我们都需要。
假设您要通过组装化油器,齿轮箱,轮胎,曲轴等不同的零件来制造汽车。所有这些零件都是由不同的供应商(认为是开发商)制造的。
当汽车无法正常工作时,您是否需要测试单个组件以找出问题的根源?
在组装汽车之前会测试组件,从而节省时间和精力吗?
通常,您要做的是在将每个组件添加到汽车中之前确保每个组件都能按预期工作(单元测试)。
当汽车无法正常工作时,请测试每个组件以找出问题的根本原因。
这通常通过创建装配线(CI管道)来工作。您的测试策略看起来像
测试单个组件
测试当与其他组件连接时它们是否起作用
所有部件组装在一起后对汽车进行测试。
这种测试策略被称为编程中的测试金字塔。
阅读此书可能会给您带来更多的见解:https://martinfowler.com/bliki/TestPyramid.html
答案 1 :(得分:5)
立即想到两个原因,尽管进行了自动化测试,您仍要进行单元测试。
答案 2 :(得分:3)
除了Nishants和James的答案:使用UI /端到端测试,要针对某些错误情况进行测试要困难得多。
答案 3 :(得分:2)
首先,您需要了解单元测试用例和用户界面 (UI) 测试自动化是两个不同的概念。在单元测试用例中,您为每个单元编写测试用例并逐个模块地对其进行测试——实际上您是在分别测试每个模块。
另一方面,Test automation 涵盖端到端测试。它测试您的端到端输入及其各自的输出。两者都有自己的优势,因此您需要在您的产品上同时使用它们以确保它没有错误。让我们通过一个例子更好地理解单元测试的必要性:
您正在构建一个聊天应用。对于该应用程序,您正在集成不同的模块,例如登录、注册、发送和接收消息、消息历史记录等。现在,假设有多个开发人员在开发该产品:每个开发人员都在开发不同的模块。在这种情况下,您需要将所有模块加入到系统流程中,才能制作出完整的产品。集成所有模块后,发现该产品无法存储消息。所以,现在您需要独立测试每个模块,因为您无法判断哪个特定模块不起作用。
为了避免这种情况,最好在将每个模块与其他模块合并之前对其进行测试。这称为unit testing。如果单元测试正确完成,您将立即得到错误。一旦所有单元测试用例都通过,您就可以开始集成模块了。
单元测试通常通过使用装配线 (CI pipeline) 来执行。如果您创建了一个好的测试策略并编写了最好的测试用例,您的产品通常会起作用。流程有点像这样:
最后,如果所有测试用例都通过,则意味着您的系统已准备好完美运行。