标签: specflow

如何在ASP.NET MVC中以BDD样式进行单元和集成测试?

我正在学习使用ASP.NET MVC的行为驱动开发,并且基于Steve Sanderson的一篇文章,了解BDD至少可以表示以下测试类型:代码和UI交互的单个单元.这篇文章提到了类似的东西.如果我需要单元测试和集成测试,是否需要两个不同的测试框架?

  • 使用上下文/规范框架(如MSpec)对存储库,控制器和服务进行单元测试.使用它进行测试的结果对开发团队很有用.

  • 使用给定的/ when/then框架测试完整的行为(集成),例如使用Watin的SpecFlow.此测试的结果对我的客户非常有用.

到目前为止我使用BDD看到的视频仅限于在不测试存储库,控制器等行为的情况下测试实体的行为......是否有一个示例项目,我可以看到自动单元和集成测试使用BDD方法?

asp.net-mvc bdd mspec specflow

11
推荐指数
1
解决办法
4356
查看次数

不使用Visual Studio运行SpecFlow测试

我希望QA团队能够运行SpecFlow测试.我希望他们能够更改值并添加更多场景.这些附加方案将具有匹配的步骤定义,因此它们只需要修改这些功能.

QA团队无权访问Visual Studio.

是否可以在不使用Visual Studio的情况下实现此目的?

我们目前正在使用MS Test,但如果有帮助,我们愿意使用NUnit.

nunit mstest specflow

11
推荐指数
1
解决办法
1万
查看次数

SpecFlow - 多个BeforeScenario方法的排序

我正熟悉SpecFlow,我真的非常喜欢它.

除了一些棘手的问题......比如功能和场景设置代码.

在一个名为"通用"的文件中InfrastructureSteps.cs,我有一个应该为每个场景运行的常规设置代码 - 所以我的方法看起来像这样:

[BeforeScenario]
public void SetupDbContext()
{
    // define some basic stuff, set up a database transaction context etc.
}
Run Code Online (Sandbox Code Playgroud)

这需要在每个场景之前运行,到目前为止,它已经运行得很好.

但是现在,我在测试特定的步骤文件中有两个场景,在运行之前还需要相当广泛的设置.所以我.feature用标签标记了他们的场景:

@needs_extra_setup
Scenario: .....
   Given .....
   When .....
   Then ......
Run Code Online (Sandbox Code Playgroud)

并实现了特定于测试的BeforeScenario设置方法:

[BeforeScenario("needs_extra_setup")]
public void DoExtraSetupForMyScenario()
{
   // do stuff
}
Run Code Online (Sandbox Code Playgroud)

它可以工作 - 它被调用 - 但是在调用通用方法之前[BeforeScenario]调用它:-(因此它失败了 - 在通用设置方法中设置的东西不存在并导致我的代码失败.

那么在SpecFlow中有什么方法可以对这些[BeforeScenario]方法进行排序吗?或者我可以告诉一个特定的[BeforeScenario]方法来首先执行"基础" [BeforeScenario]方法,如在overriden方法中调用基本方法?

当然,我可以[BeforeScenario]明确地称之为"基础" 方法 - 但这看起来有点像大锤方法......

有任何想法吗?思考?指针?

testing specflow

11
推荐指数
1
解决办法
7483
查看次数

从另一个功能中重新规划和重复使用步骤

我正在尝试学习specflow,现在.目前我有2个功能文件.

在第二个功能文件中,我将重用第一个功能文件中的一个步骤.

Specflow会自动识别第一个功能文件中的步骤,当specflow为我的第二个功能生成步骤时,它很聪明,并且没有重新生成我重复使用的步骤.

但是这一步是给定步骤,它初始化要素类的成员字段.

在不使用场景上下文的情况下,如何重用初始化类成员的另一个功能文件中的步骤?

编辑

例如,如果您有一个已登录,则在多个功能文件中使用.此"Given"创建一个记录的用户对象,并将其作为成员存储在.cs功能文件中.

当您在另一个.feature中使用相同的Given时,Specflow不会在相应的.cs文件中重新生成它.当您调试正在使用它的场景时,它会从第一个.cs文件执行它.

但我无法访问第一个.cs功能文件的成员.我打算使用静态成员,但也许有另一种解决方案?

非常感谢.

code-reuse specflow

11
推荐指数
2
解决办法
1万
查看次数

如何使用MSTest从命令行运行SpecFlow方案?

我有Visual Studio 2010,我们有两个VS解决方案.第一个是Web应用程序,第二个是SpecFlow测试.让两个Visual Studio实例同时运行只是为了运行SpecFlow功能正在吃掉所有可用的RAM,导致速度变慢.

我已经在Google上和StackOverflow上进行了一些搜索,并在MSTest命令行工具上仔细阅读了MS文档,但我还没有找到答案.完整的SpecFlow测试套件需要大约45分钟才能完成,我真的只需要运行几个场景.

我想知道是否有办法使用MSTest从命令行运行单独的SpecFlow功能,甚至是个别方案?

c# bdd mstest specflow

11
推荐指数
2
解决办法
2万
查看次数

如何在Resharper中运行单个Specflow场景

我正在使用Specflow(http://specflow.org/)编写一些集成测试,我想运行一个Scenario.有没有办法用Resharper 6运行单个场景?顺便说一句,我配置specflow来使用MSTest.

我的Specflow测试看起来像:

Feature: Customer management

Scenario: Add a new Customer into system
    Given the User has entered the customer with the following data
    | name  | last_name | birthday   |
    | Peter | Stein     | 12.09.1955 |
    When the User has pressed the Save Button
    Then the following customer should be stored in the data base
    | name  | last_name | birthday   |
    | Peter | Steim    | 12.09.1955 |

Scenario: Second scenario.....

Scenario: Third scenario.....
Run Code Online (Sandbox Code Playgroud)

我想只运行第一个场景.

bdd specflow resharper-6.0

10
推荐指数
1
解决办法
5459
查看次数

Specflow使用具有场景上下文的表中的参数

我在C#中使用Specflow来使用Selenium构建自动客户端浏览器测试.

这些测试的目标是模拟客户在特定页面中进入我们网站的业务场景,然后将其定向到正确的页面.

我想在场景上下文中使用参数,例如:

When I visit url
 | base                         | page      | parameter1       | parameter2     |
 | http://www.stackoverflow.com | questions | <questionNumber> | <questionName> |
Then browser contains test <questionNumber>

Examples: 
    | <questionNumber> | <questionName> |
    | 123              | specflow-q1    |
    | 456              | specflow-q2    |
    | 789              | specflow-q3    |
Run Code Online (Sandbox Code Playgroud)

注意:步骤"当我访问url"时需要base + page + parameter1 + parameter2,创建url"base/page/parameter1/parameter2"并转到此URL.

问题是步骤"我访问url"中的输入表是按原样传递文本,而不修改为"示例"部分中的"等效".

这意味着上面语法构建的表有一行数据参数名称:

http://www.stackoverflow.com,问题,questionNumber,questionName

而不是使用他们的价值:

http: //www.stackoverflow.com,questions,123,specflow-q1

你知道我怎么能正确使用它?

.net c# bdd specflow gherkin

10
推荐指数
2
解决办法
2万
查看次数

如何将Appium与C#集成?

我无法找到一个帖子,我可以用C#中的appium自动进行移动测试.

我在specflow中编写了我的网站自动化代码.我可以重复使用吗?

c# specflow selenium-webdriver appium

10
推荐指数
2
解决办法
2万
查看次数

如何在specflow步骤定义表中输入null值

如何通过表在Specflow中输入空值?

让我们看一个过于简单的例子:

When a tire is attached to a car
| CarId | TireModel      | FabricationDate | Batch |
| 1     | Nokian Hakka R | 2015-09-1       |       |
Run Code Online (Sandbox Code Playgroud)

Batch列中的空字符串按specflow解释为文本,因此为空字符串.是否有特殊语法将该列标记为null?

bdd specflow gherkin

10
推荐指数
2
解决办法
8873
查看次数

Specflow步骤等待异步API

我们试图通过以下方法来打破测试,以防DoAyncStuff()方法中发生故障:

[Given(@"There is something")]
public async Task GivenSomething()
{
    await DoStuff();
}

private async Task DoStuff()
{
    await Task.Run(() => Thread.Sleep(1000));
    throw new ApplicationException("Boom");
}
Run Code Online (Sandbox Code Playgroud)

但它实际上是一个快乐的绿色运行,直到你使用.Wait().Result:

[Given(@"There is something")]
public void GivenSomething()
{
    DoStuff().Wait();
}
Run Code Online (Sandbox Code Playgroud)

问题似乎出现在NUnit generated-spec中,如下所示:

public virtual void SomethingAsync()
{
    ...
    testRunner.Given("There is something", ...);
    ...
}
Run Code Online (Sandbox Code Playgroud)

这似乎与以下代码一起使用:

public virtual async Task SomethingAsync()
{
    ...
    await this.ScenarioSetup(scenarioInfo);
    ...
}
Run Code Online (Sandbox Code Playgroud)

上面的代码是手动编辑的自动生成的文件,所以我实际上正在寻找一种自动生成以下代码的方法.

该文档似乎是asyncronous API唯一可用的选项,但实际上它适用于Silverlight,据我所知使用某种API,而我们更喜欢使用本机C#await关键字.

是否有一种方法可以原生处理async/awaitSpecFlow步骤?

c# bdd nunit specflow async-await

10
推荐指数
1
解决办法
3066
查看次数