我的团队正在使用S#arp架构框架在ASP.Net MVC 2中编写内容管理的Web托管应用程序.我正在使用SpecFlow和WatiN进行集成测试,使用NUnit进行单元测试.
我有一个自定义控制器工厂,它根据URL和站点在数据库中查找页面,然后加载适当的控制器和操作.当在数据库中找不到页面(或站点)时,它还会加载错误控制器.
我想写一个单元测试或集成测试,当URL无效时,验证404页面是否正确显示.WatiN无法检查响应头,因此无法准确确保加载了实际的404页面.这可能会消除集成测试作为解决方案.
我是TDD和BDD的新手,所以我可能会遗漏一些明显的东西.此外,我正在对这个项目进行改造测试,这使得它变得更加困难.
提前致谢.
我正在重构我们的SpecFlow实现的BDD测试.作为这项工作的一部分,我已经评论了大多数步骤定义.
当我运行测试时,我会看到"找到一个或多个步骤没有匹配的步骤定义".信息.
但是,我宁愿不要等到测试实际运行.有没有办法让SpecFlow在不运行测试的情况下检查缺少的步骤定义?
大家好我们正在开发一个可通过SOAP和REST(xml和JSon)获得的Web服务.我们的specflow功能大致相同,即:
Scenario: There are at least 3 radio Channels
Given The test server is up and running
And The previously obtained channel list is reset
When I request a list of radio channels
Then the resulting deliveryPackage contains a list of at least 3 items
Run Code Online (Sandbox Code Playgroud)
所有这些功能都需要针对SOAP接口,REST/Xml接口以及REST/JSon接口进行测试.
在黄瓜中,可以使用-R运行这些功能来指示步骤文件所在的位置,但是在SpecFlow中,我还没有找到绕过步骤文件的方法,因此我可以使用相同的功能运行不同的步骤.
我宁愿不必编写每个方案3次,以便更改要使用的步骤实现.
那么,有两个问题:1)如何针对3种不同的接口运行3次特征,这些接口需要完全相同的场景?2)每次如何选择正确的步骤文件?
解决(1)可能会解决(2).
我已经开始使用SpecFlow来尝试为我的一个ASP.NET MVC Web应用程序编写规范.我遇到了两个基本问题,我没有在谷歌找到任何答案.
有没有办法模仿浏览器行为,而无需创建实际的浏览器实例.我知道有像"WatiN"这样的库可以创建实际的浏览器实例,我不愿意使用它,因为它可能会显着降低测试性能(我需要在构建服务器中运行它们)
我需要依赖浏览器或模拟浏览器的原因是我不想在控制器上进行测试,因为它不能保证在我直接实例化控制器时触发所有的动作过滤器(因为它是asp.net mvc引擎的一部分).有人可以建议我采用方法测试我的控制器 - 所有动作过滤器都启动了(这样我可能不想使用浏览器/模拟浏览器)?
谢谢
大黄蜂
我们有从三个不同角度测试的代码:
由于我们不想编写三次功能文件,似乎我们应该在Steps之间共享功能,但我无法弄清楚如何完成这项功能,除了可能在VS项目之间共享文件,这似乎一直是有点,好吧,片状.
在项目之间共享功能文件是实现这一目标的最佳方式,还是有更明智的方法?
我要登录一次,然后在关闭浏览器之前运行几个方案(假设有7个方案)。
我使用Background而不是在每个场景中都登录了Given,但是似乎每次运行场景时,它都首先登录。
这减慢了我的测试速度。
我想做的事:
登录并在同一浏览器窗口上运行多个方案,然后在完成后将其关闭。
我有两台具有不同文化的机器,其中一种格式mm/dd/yyyy被Specflow成功解析(它是一个步骤参数),但在另一台机器中失败.
我希望我的测试能够独立于文化.那么如何配置Specflow CultureInfo.InvariantCulture用于解析日期?
我在同一个功能文件中写了两行(When's)
When user $action1$ $key1$ with $value1$ for $atttributeType_Value$ in $Filename1_SectionId1$
Then abc
When user $action2$ $key2$ with $value2$ in $Filename2_SectionId2$
Then def
Run Code Online (Sandbox Code Playgroud)
步骤定义文件中的相应步骤定义
如
[When(@"user (.*) (.*) with (.*) for (.*) in (.*)")]
public void abc()
{ //operation }
[When(@"user (.*) (.*) with (.*) in (.*)")]
public void def()
{ //operation }
Run Code Online (Sandbox Code Playgroud)
但是,它显示错误为"找到多个匹配绑定.导航到第一个匹配..."
当我尝试导航第一行时给出错误...但是当我使用第二行时导航.它正确导航.
我在"<"和">"所在的地方使用了"$".
我对人们用Gherkin语言编写语句以描述为验收测试执行的各种操作的方式感到困惑.
在一些文章中,人们使用"我",在一些文章中人们使用"用户".
对于reaction(Then)语句也是如此:
Case 1 --> xyz page should be displayed
Case 2 --> xyz page is displayed
Ex 1:
Given statement abc
When user performs action A
Then screen xyz should be displayed
Ex 2:
Given statement abc
When I perform action A
Then screen xyz is displayed
Run Code Online (Sandbox Code Playgroud)
写"用户"或"我"是否更好,写"应该是"还是"是"更好,这样我的BDD场景是否符合标准?
对任何文章的引用也将是一个很大的帮助.提前致谢.
我有一个selenium Specflow c#项目,我可以从测试资源管理器和ReSharper单元测试资源管理器执行测试.
但是当我运行命令行来执行测试时(这就是Jenkins执行测试的方式)
它没有在DLL中找到任何测试
mstest /testcontainer:MoneyUITests.dll /test:NavigateToLoans
Microsoft (R) Test Execution Command Line Tool Version 15.0.26621.2
Copyright (c) Microsoft Corporation. All rights reserved.
Loading MoneyUITests.dll...
Test NavigateToLoans cannot be found.
Test NavigateToLoans cannot be found.
Starting execution...
No tests to execute.
Run Code Online (Sandbox Code Playgroud)
不确定我做错了什么,看起来很奇怪,visual studio设法找到并执行测试没有问题.