2013-10-28 23 views
3

所以在我的应用程序中,我有网格与所有用户注册到网站的列表。现在我想用specflow和WatiN来测试它。Specflow - 正确的方式来测试网格数据

我想出了以下方案:

Scenario: List of users 
    Given I am logged in as "Admin" user 
    And There exists following users 
     | Username | First name | Last Name | Registration date | 
     | alice | Alice  | LAlice | 2013-10-28  | 
     | bob  | Bob  | LBob  | 2013-10-27  | 
    When I go to all users page 
    Then There should be following users in table 
     | Username | First name | Last Name | Registration date | 
     | alice | Alice  | LAlice | 2013-10-28  | 
     | bob  | Bob  | LBob  | 2013-10-27  | 

的问题是,这个表是整个步骤重复,我不知道这是正确的方式。有没有更好的方法来测试数据是否加载到网格中?

回答

1

为了检查我正确理解问题,您担心的是您在一个场景的Given和Then步骤中重复了表的定义(即,您没有运行100个类似的场景,都需要相同的表集向上)。

它看起来像你有什么很好。

请考虑如果UI需要少量数据转换会发生什么情况。 例如

Given I am logged in as "Admin" user 
And There exists following users 
    | Username | First name | Last Name | Registration date | 
    | alice | Alice  | Wonderland| 2013-10-28  | 
    | bob  | Bobby  | Tables | 2013-10-27  | 
When I go to all users page 
Then There should be following users in table 
    | Username | Full Name  | Registration date | 
    | alice | Alice Wonderland | 2013-10-28  | 
    | bob  | Bobby Tables  | 2013-10-27  | 

这种情况很明显,你不能在这里保存任何空间。

正如您所做的那样,通过完全重复表格,您在测试/生活文档中明确指出,您在页面上看到的内容应与内存中的数据表示完全匹配。这在测试中值得表达。

Given I am logged in as "Admin" user 
And there exists the following users 
    | Username | First name | Last Name | Registration date | 
    | alice | Alice  | LAlice | 2013-10-28  | 
    | bob  | Bob  | LBob  | 2013-10-27  | 
When I go to all users page 
Then I should be able to see all the users 

这不是很清楚的,需要设立随后来到步骤您共享数据与给定的步骤或实际查询模拟数据上下文本身:

,可以节省一些空间的其他选项(一个非常糟糕的计划,因为测试可能会因为错误原因而通过)。

如果你问是否有任何行C++的#define关键字来设置一个可重用的多行字符串const - 据我所知,没有,如果有,你不应该使用它的原因以上清晰。

总之 - 我喜欢你的测试。 :)

---- ----编辑 有感:

测试应该失败的确切原因之一。 可以说,你的测试正在测试“表格数据是否正确。”

但有时你只是想测试一些简单的东西。例如。

Then user 'alice' should appear in the users table 
4

你可以用不同的方式处理这个测试,但同时下面的方法将从您的方案中删除重复数据,它不一定是更有效,因为测试将逐个检查每个用户。

你可以做的是重写测试,以利用Specflow的Scenario Outline功能。然后,如果您要按照以下方式重写场景,则只需定义一次用户数据:

Scenario Outline: List of users 
Given I am logged in as "Admin" user 
And There exists <Username> with <First name> <Last Name> and <Registration date> 
When I go to all users page 
Then There should be <Username> with <First name> <Last Name> and <Registration date> 

    examples: 
    | Username | First name | Last Name | Registration date | 
    | alice | Alice  | LAlice | 2013-10-28  | 
    | bob  | Bob  | LBob  | 2013-10-27  | 
+0

+1这是查看此测试的非常有用的替代方法。正如你所说,它对于测试一个稍微不同的方面很有用:即“我可以在我的页面上呈现下面的每一行数据” - 如果你关心像unicode格式化或html/javascript注入这样的事情,那么这很有用。如果测试要检查整个数据集的完整性或自动分类等,那么这将不太合适。 – perfectionist

+0

@perfectionist是的,你是正确的,很高兴你明白答案。我的答案显示了如何删除功能文件中的重复数据,但正如您所说,您无法验证所有条目是否在临时屏幕上显示。 –