假设厨师可以制作食谱,副厨师可以创建必须经过主厨批准的食谱。
您想要测试一下,当主厨查看她的主页时,她会看到她自己创建的食谱。您还想测试她是否看到有食谱等待她的批准。
我可以想到两种方法来做到这一点:
- 测试视图是否包含某些单词,例如“您的食谱”和“等待您批准的食谱”
- 将不必要的属性添加到您正在使用的 html 元素中,以便您可以检查带有“id=recipe_1”或“data-for-the-sake-of-testing=1”的元素
我非常不喜欢这两种方法。
为什么方法#1 很糟糕
- 令人难以置信的脆弱测试。每次您想要对副本进行较小的更新时,测试都会中断。
- 国际化?这种方法将如何发挥作用?
可能还有更多原因,但这两个原因相当重要。
为什么方法#2 很糟糕
为了测试而使用多余的标记是多么烦人!用户不应为了测试而增加下载大小。
对此有什么好的方法吗?我有兴趣听到任何替代方案,无论您使用什么语言。我主要考虑 Ruby、Test::Unit、Minitest、RSpec 和 Cucumber(尽管我的 Cuke 技能已经过时),但如果使用其他语言/框架弄清楚这一点后,我也很想看看他们在做什么。
使用页面范例。
尽可能以能力级别(高级别)的方式以人性化的方式表述这些步骤,并使用具体的示例。例如,如果我使用 Cucumber,我可能会说:
鉴于副主厨创造了青蛙派的食谱
当厨师寻找需要批准的菜谱时
那么青蛙派的食谱应该在列表中。
在这些步骤的代码中,实例化或查找您要查找的特定页面,其中页面是表示页面功能的对象。该页面可以有all用户可以在页面上执行的操作 - 查找菜谱、批准菜谱、移至另一个页面等。
这样,如果您需要更改该步骤的底层代码,您只需在一处进行更改,并且特定页面的所有更改都将集中在一起。因为您已经根据要交付的功能来描述场景,所以不太可能需要对场景进行太大更改(除非您发现您的业务需要与您要交付的功能不同的功能)。
这对于基于窗口的应用程序也非常有效,每个小部件或模块都是一个特定的页面。
拥有额外的 id 来进行测试也很好。有时设计师也喜欢使用它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)