Configures Reqnroll (the canonical .NET BDD framework) - install via `dotnet add package Reqnroll`, author `.feature` files in Gherkin, write step bindings as `[Given/When/Then]`-decorated methods in any C# class, runs via `dotnet test`. Reqnroll is the SpecFlow successor (SpecFlow reached end-of-life 2024-12-31); covers the SpecFlow-to-Reqnroll migration path, and references/specflow-legacy.md maintains not-yet-migrated SpecFlow projects. Use for .NET projects starting BDD, migrating from SpecFlow, or maintaining legacy SpecFlow suites.
75
94%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Deep reference for reqnroll-testing. Consult when maintaining an existing
SpecFlow project that has not migrated yet, or when executing the migration.
SpecFlow was the standard .NET BDD runner for a decade. It is dead:
Tricentis, which owned it, states "SpecFlow has been retired"
(shiftsync.tricentis.com),
specflow.org redirects there, and it "reached its end-of-life on
December 31, 2024" with the GitHub projects deleted as of 1 January
(reqnroll.net).
The packages still install only because nuget.org will not delete existing
ones - exactly how newcomers land on an unsupported dependency. New .NET BDD
work targets Reqnroll; use this page only for existing SpecFlow projects,
especially mid-migration.
Package references (legacy):
<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" />Features are the same Gherkin as Reqnroll / Cucumber. Step bindings:
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. Running is the same dotnet test (the runner is the
.NET test framework - xUnit / NUnit / MsTest).
Per reqnroll.net: "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 testMost projects migrate in under a day; the migration is mostly mechanical.
| Anti-pattern | Why it fails | Fix |
|---|---|---|
| Starting new .NET BDD with SpecFlow | Reqnroll is the actively-maintained successor; SpecFlow is EOL | Use the main reqnroll-testing skill |
| Postponing migration indefinitely | SpecFlow falls further behind .NET / IDE support | Migrate now; the cost grows over time |
| Mixing SpecFlow + Reqnroll in one solution | Two runners; conflicts | All-or-nothing migration |