CtrlK
BlogDocsLog inGet started
Tessl Logo

testland/reqnroll-testing

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

Quality

94%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

Overview
Quality
Evals
Security
Files

specflow-legacy.mdreferences/

SpecFlow legacy support and migration to Reqnroll

Deep reference for reqnroll-testing. Consult when maintaining an existing SpecFlow project that has not migrated yet, or when executing the migration.

SpecFlow is end-of-life

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.

Maintaining an existing SpecFlow project (legacy)

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.SpecFlowusing Reqnroll; decorators identical. Running is the same dotnet test (the runner is the .NET test framework - xUnit / NUnit / MsTest).

Migration path

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 test

Most projects migrate in under a day; the migration is mostly mechanical.

Anti-patterns

Anti-patternWhy it failsFix
Starting new .NET BDD with SpecFlowReqnroll is the actively-maintained successor; SpecFlow is EOLUse the main reqnroll-testing skill
Postponing migration indefinitelySpecFlow falls further behind .NET / IDE supportMigrate now; the cost grows over time
Mixing SpecFlow + Reqnroll in one solutionTwo runners; conflictsAll-or-nothing migration

Limitations of staying on SpecFlow

  • Maintenance status. EOL - no bug fixes, no new features.
  • .NET version compatibility. Newer .NET versions land on Reqnroll only.
  • IDE plugin updates. SpecFlow plugins for VS / Rider are frozen; Reqnroll's are maintained.

SKILL.md

tile.json