From qa-bdd
Legacy support for SpecFlow (.NET BDD framework that predates Reqnroll) - for projects that haven't migrated yet. Mirrors Reqnroll's API closely (Reqnroll is the SpecFlow fork). Body documents the SpecFlow patterns + the migration path to Reqnroll. Per Reqnroll's own positioning, new .NET BDD work targets Reqnroll, not SpecFlow. Use only for existing SpecFlow projects mid-migration; new projects use `reqnroll-testing` instead.
How this skill is triggered — by the user, by Claude, or both
Slash command
/qa-bdd:specflow-testingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
SpecFlow is the historical .NET BDD framework that originated the
SpecFlow is the historical .NET BDD framework that originated the
Cucumber-for-.NET ecosystem. Reqnroll forked from it in 2023 due
to slowing SpecFlow maintenance; per
reqnroll-home, Reqnroll is "an
open-source Cucumber-style BDD test automation framework for
.NET. It has been created as a reboot of the SpecFlow project."
This skill exists to support existing SpecFlow projects.
For new .NET BDD work, use reqnroll-testing - Reqnroll is API-compatible and actively maintained.
If starting a new .NET BDD project: stop. Use Reqnroll.
<PackageReference Include="SpecFlow" Version="3.9.74" />
<PackageReference Include="SpecFlow.xUnit" Version="3.9.74" />
<PackageReference Include="SpecFlow.Tools.MsBuild.Generation" Version="3.9.74" />
Same Gherkin as Reqnroll / Cucumber:
Feature: Apply promo code at checkout
Scenario: Apply valid promo
Given a logged-in user
When I enter "WELCOME10" in the promo input
Then the subtotal updates to $22.49
using TechTalk.SpecFlow;
using Xunit;
[Binding]
public class CartSteps
{
[Given("a logged-in user")]
public void GivenLoggedInUser() { /* ... */ }
[When(@"I enter ""([^""]*)"" in the promo input")]
public void WhenIEnter(string code) { /* ... */ }
[Then(@"the subtotal updates to \$(\d+\.\d+)")]
public void ThenSubtotalUpdates(decimal expected) { /* ... */ }
}
Compare to Reqnroll: using TechTalk.SpecFlow → using Reqnroll.
Decorators identical.
Per reqnroll-home: "Compatible with
SpecFlow, allowing quick migration of existing projects."
# 1. Remove SpecFlow packages
dotnet remove package SpecFlow
dotnet remove package SpecFlow.xUnit
dotnet remove package SpecFlow.Tools.MsBuild.Generation
# 2. Add Reqnroll equivalents
dotnet add package Reqnroll.xUnit
dotnet add package Reqnroll.Tools.MsBuild.Generation
// 3. Find/replace in code:
// using TechTalk.SpecFlow → using Reqnroll
// TechTalk.SpecFlow → Reqnroll
# 4. Run tests; fix any breakages
dotnet test
Most projects migrate in <1 day. The migration is mostly mechanical.
| Reason |
|---|
| SpecFlow's maintenance has slowed; new versions sparse. |
| .NET 8+ support is more reliable on Reqnroll. |
| Reqnroll has community contributions; SpecFlow's stagnated. |
Per reqnroll-home: the project is "open-source" and "community-driven." |
| New IDE plugin support targets Reqnroll first. |
dotnet test
dotnet test --filter "Category=critical"
Same as Reqnroll. The runner is the .NET test framework (xUnit / NUnit / MsTest).
| Anti-pattern | Why it fails | Fix |
|---|---|---|
| Starting new .NET BDD with SpecFlow | Reqnroll is the actively-maintained successor. | Use reqnroll-testing. |
| Postponing migration indefinitely | SpecFlow falls further behind .NET / IDE support. | Migrate now (Step 4); the cost grows over time. |
| Mixing SpecFlow + Reqnroll in one solution | Two runners; conflicts. | All-or-nothing migration. |
reqnroll-home - Reqnroll's own
description of itself as "a reboot of the SpecFlow project."reqnroll-testing - the
recommended skill for new .NET BDD projects.cucumber-testing,
behave-testing - non-.NET
alternatives if rewriting.Provides a checklist for code reviews covering functionality, security, performance, maintainability, tests, and quality. Use for pull requests, audits, team standards, and developer training.
npx claudepluginhub testland/qa --plugin qa-bdd