我必须扩展/修复由其他开发人员编写的大型在线表单。有大量的代码,混合PHP和JS。这是一种只写的编码风格,我想完全重新做,但目前我不能。
它的工作方式如下:
手工测试这个东西太荒谬了,所以我用贝帽和Mink和Selenium2编写了一个测试。
我现在只有一个测试,它完成了表单的所有12个阶段。在填写表单的过程中,为了达到特定的目的,我创建了一个步骤定义,它只是让webdriver等待了1个小时(嘲笑我)。当我需要测试一些特定的阶段时,我只需添加这个步骤,我希望Selenium停止-这样就可以打开浏览器窗口,这样我就可以手动完成我想做的任何事情,而不必填充所有以前的字段。
它节省了大量的时间,但感觉很愚蠢。我有理由这么做:
我问题的简化版本是:我应该如何测试这个?
我可以想出几种方法:
所以,我的问题的完整版本是:哪一种方式更可取,每一种方式都有什么优势?也许还有其他的方法,比如以完全不同的方式设计一个应用程序,这样就没有这样的问题了。
发布于 2012-12-20 20:50:06
首先,不要为了测试的方便而更改代码。老实说,这是狗尾巴摇动的情况。
在某些情况下,重构代码以简化测试是合理的,但对于您所阐述的,这是一个可怕的想法。当你收到这样的遗产“礼物”时,你的首要任务是不改变任何事情,直到你开始对它的影响进行拳击。
对你的问题..。
采用一种围绕输入阶段构建测试步骤的方法。我们将假装有业务需求表明输入应该以您所描述的方式接收。(好吧,我们知道这是个谎言,但让我们说出怀疑的好处吧)。
这种伪装实际上使测试代码变得更容易。这是一个隐含的业务规则,即阶段2不能被测试,除非阶段1是完整和正确的。退一步,您将看到这极大地简化了您必须测试的场景的数量。第二阶段中的测试现在可以假设第一阶段中的一切都是合乎情理的,因为业务规则说,除非1是好的,否则您不能继续到第二阶段。
听起来,考虑到你所处的约束条件,你正在采取正确的方法来测试事情。换句话说-分诊。在理想的世界中,您可以重写所有东西,同时也可以编写完美的测试用例。在此期间,截止日期即将到来,更新需要发货。从“重击”测试用例开始,并在时间允许的情况下添加额外的细微差别。老实说,这与大多数其他发展并没有什么不同。时间通常是一个项目负担不起的奢侈品。
您的不适感是测试代码的理想方法与测试代码的实用方法之间的冲突。对于开发过程中的妥协,这是一个相当正常的反应。注释您需要采取的快捷方式,指出需要改进的地方,并不断增加。
为了帮助测试后期阶段,创建可重用的模拟代码部分,从而正确地完成前面的部分。因此,要测试阶段3,您将进行两次调用,以正确完成阶段1和阶段2,并允许公开第3阶段。这是一次小小的黑客攻击,但它也反映了应用程序中涉及的业务规则。换句话说,将现有的单个测试划分为12个组件。这将使您能够更容易地/独立地执行下游阶段。
https://softwareengineering.stackexchange.com/questions/180189
复制相似问题