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
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 |