假设厨师可以制作食谱,而副厨师长可以制作必须由主厨批准的食谱。
您想测试一下,当主厨查看她的主页时,她会看到她自己创建的食谱。您还想测试她是否看到有等待她批准的食谱。
我可以想到两种方法来做到这一点:
我非常不喜欢这两种方法。
为什么方法#1很烂
可能还有更多原因,但这两个是相当大的。
为什么方法#2很烂
仅仅为了测试而有多余的标记是多么烦人!用户不应该为了测试而增加下载大小。
对此有什么好的方法?我很想听听任何替代方案,无论您使用哪种语言。我主要使用 Ruby、Test::Unit、Minitest、RSpec 和 Cucumber(尽管我的 Cuke 技能已经过时),但如果其他语言/框架弄清楚了,我也很想看看他们在做什么。
最佳答案
使用页面范例。
尽可能以人性化的方式表达这些步骤,尽可能在能力级别(高级),并使用具体示例。例如,如果我使用 Cucumber,我可能会说:
Given the sous-chef has created a recipe for Frog Pie
When the chef looks for recipes to approve
Then the recipe for Frog Pie should be in the list.
在这些步骤的代码中,实例化或查找您要查找的特定页面,其中该页面是表示页面功能的对象。然后,该页面可以包含用户可以对该页面执行的所有操作 - 查找食谱、批准食谱、移动到另一个页面等。
这样,如果您需要更改步骤的底层代码,您只需在一个地方更改它,特定页面的所有更改都会一起进行。因为您已经根据您要交付的功能来表述该场景,所以该场景不太可能需要进行太多更改(除非您发现您的业务需要与您所交付的功能不同的功能)。
这对于基于窗口的应用程序也很有效,每个小部件或模块都是一个特定的页面。
有额外的 id 只是为了测试也很好。有时设计师也喜欢使用它们。
关于view - 测试: How to test that view contains desired data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10660149/