3

如何使用 MSpec 表示以下场景?:

Scenario: Navigation to homepage
   When I navigate to /Guestbook
   Then I should be on the guestbook page

SpecFlow 使这类事情变得更容易,因为我们可以将参数传递到我们的规范中:

[When(@"I navigate to (.*)")]
public void WhenINavigateTo(string relativeUrl)
{
}

使用 MSpec,上下文/规范来自类的名称,因此我不能使用任何特殊字符(例如 url 中使用的字符)。

我想要实现的是这样的输出:

Browsing the site, When I navigate to /guestbook
¯ should go to the guestbook page
Browsing the site, When I navigate to /news/article-slug
¯ should go to the news article with matching slug
4

2 回答 2

2

SpecFlow 主要用于系统级示例,而 MSpec 通常用于类级示例。

对于 URL 行为和更多技术细节,我倾向于使用类级别的示例,AKA 单元测试。MSpec 非常适合这个。例如,这描述了一个提供 URL 的 Navigator 类:

我的 Navigator 类应该提供易读且令人难忘的 url

给定一篇带有 slug cat-in-a-tree 的文章
当我们向导航器询问 url
时,它应该是可读的。

然后,您可以在该示例中检查您的实际 URL。

在更高的层次上,尝试根据您的系统提供给用户的功能来考虑场景。如果我是用户,我为什么要关心我是否可以将特定 URL 用于留言簿?为什么我首先要去留言簿?SpecFlow 更适合这个级别。

我的留言簿应该会显示谁已登录

鉴于键盘猫最近签署了我
的留言簿当我去留言簿时
,我应该在列表中看到键盘猫的名字。

现在您可以让场景导航到留言簿,但在场景的步骤中保留用户如何导航到留言簿的详细信息。您还可以看到,该场景并没有说明您使用的是网页、Windows 应用程序、手机还是实体书——它只是关于您提供的功能。通常,像这样的更高级别的场景将更容易维护,并帮助您的整个团队专注于您为用户提供的价值。

于 2012-04-09T09:28:07.440 回答
2

在上下文或 MSpec 中的规范中并没有真正使用特殊字符的方法,以前从未需要过它。我认为你是我见过的唯一一个有令人信服的理由在他们的规范中有一个真正的 url 路径的人。通常你会避免这种情况,但如果 SEO 专家正在阅读你的规格报告,那么我可以看到。您可能想尝试不同的工具或向 MSpec 提交一个补丁,以添加对可以覆盖上下文或规范的字符串名称的属性的支持。

于 2012-08-16T15:26:23.767 回答