测试路由时,我可以在MSpec测试名称中包含URL字符吗?

时间:2012-04-08 11:30:20

标签: routing bdd mspec

如何使用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

2 个答案:

答案 0 :(得分:2)

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

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

  

我的Navigator类应提供可读且令人难忘的网址

     

给出一篇关于slu cat cat-in-a-tree的文章   当我们向导航器询问网址时   然后它应该是可读的。

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

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

  

我的留言簿应该告诉我谁已登录

     

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

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

答案 1 :(得分:2)

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