最近我有一个问题,就是是否值得花费开发时间来生成基于Web的项目的自动化单元测试?我的意思是,在某些时候它似乎是没有用处的,因为这些项目的定位是与用户/客户进行交互,所以你无法预测整个可能的用户操作集,以便检查所显示内容的正确性。即使是回归测试也很难完成。
所以我非常渴望知道其他有经验的开发人员的意见。
最近我有一个问题,就是是否值得花费开发时间来生成基于Web的项目的自动化单元测试?我的意思是,在某些时候它似乎是没有用处的,因为这些项目的定位是与用户/客户进行交互,所以你无法预测整个可能的用户操作集,以便检查所显示内容的正确性。即使是回归测试也很难完成。
所以我非常渴望知道其他有经验的开发人员的意见。
这取决于您的Web应用程序的结构和架构。如果它包含一个应用逻辑层,那么该层应该很容易使用自动化工具(如Visual Studio)进行单元测试。此外,使用已经被设计为支持单元测试的框架,例如ASP.NET MVC,会非常有帮助。
单元测试在TDD过程中是有意义的。如果您不进行测试优先开发,则它们没有太多价值。然而,验收测试对软件质量来说非常重要。我认为验收测试是开发的圣杯。验收测试显示应用程序是否满足要求。我如何知道何时停止开发功能——只有当所有验收测试都通过时才能停止。验收测试自动化非常重要,因为每次对应用程序进行更改时,我不必手动执行所有测试。经过数月的开发,可能会有数百个测试,手动运行所有测试变得不可行(有时甚至不可能)。那么,我如何知道我的应用程序仍然有效?
自动化验收测试可以使用xUnit测试框架来实现,这在这里会引起混淆。如果我使用phpUnit或httpUnit创建验收测试,那么它是单元测试吗?我的答案是否定的。无论我使用什么工具来创建和运行测试,验收测试都是展示功能是否符合要求的测试。而单元测试则是展示一个类(或函数)是否满足开发者的实现想法的测试。单元测试对客户(用户)没有价值,而验收测试对客户(因此对开发者,记住客户亲和)有很大的价值。
因此,我强烈建议为Web应用程序创建自动化验收测试。
验收测试的好框架包括:
然而
您提到网站与用户互动有关,因此测试自动化无法解决可用性的整个问题。例如:测试框架显示所有测试都通过了,但是由于在
style="display:none"
,用户无法看到表单、链接或其他页面元素。自动化测试之所以通过是因为文档中存在因此,所有Web应用程序都需要手动测试。自动化测试可以大大减轻测试工作量(80%),但手动测试对于最终软件的质量同样重要。
至于单元测试和TDD——它提高了代码质量。这对开发人员和项目的未来(即长达几个月的项目)都有好处。然而,TDD需要技能。如果您具备这种技能,请使用它。如果您没有考虑获得这种技能,但要注意获得这种技能需要花费的时间。通常需要3-6个月才能开始创建良好的单元测试和代码。如果您的项目将持续一年以上,我建议学习TDD并投入时间进行适当的开发环境。