CoreBDD alternatives and similar packages
Based on the "Testing" category.
Alternatively, view CoreBDD alternatives based on common mentions on social networks and blogs.
-
Bogus
:card_index: A simple fake data generator for C#, F#, and VB.NET. Based on and ported from the famed faker.js. -
xUnit
xUnit.net is a free, open source, community-focused unit testing tool for .NET. -
Fluent Assertions
A very extensive set of extension methods that allow you to more naturally specify the expected outcome of a TDD or BDD-style unit tests. Targets .NET Framework 4.7, as well as .NET Core 2.1, .NET Core 3.0, .NET 6, .NET Standard 2.0 and 2.1. Supports the unit test frameworks MSTest2, NUnit3, XUnit2, MSpec, and NSpec3. -
SpecFlow
#1 .NET BDD Framework. SpecFlow automates your testing & works with your existing code. Find Bugs before they happen. Behavior Driven Development helps developers, testers, and business representatives to get a better understanding of their collaboration -
AutoFixture
AutoFixture is an open source library for .NET designed to minimize the 'Arrange' phase of your unit tests in order to maximize maintainability. Its primary goal is to allow developers to focus on what is being tested rather than how to setup the test scenario, by making it easier to create object graphs containing test data. -
Testcontainers
A library to support tests with throwaway instances of Docker containers for all compatible .NET Standard versions. -
Verify
Verify is a snapshot tool that simplifies the assertion of complex data models and documents. -
NBomber
Modern and flexible load testing framework for Pull and Push scenarios, designed to test any system regardless a protocol (HTTP/WebSockets/AMQP etc) or a semantic model (Pull/Push). -
WireMock.Net
WireMock.Net is a flexible product for stubbing and mocking web HTTP responses using advanced request matching and response templating. Based on the functionality from http://WireMock.org, but extended with more functionality. -
Machine.Specifications
Machine.Specifications is a Context/Specification framework for .NET that removes language noise and simplifies tests. -
Compare-Net-Objects
What you have been waiting for :+1: Perform a deep compare of any two .NET objects using reflection. Shows the differences between the two objects. -
GenFu
GenFu is a library you can use to generate realistic test data. It is composed of several property fillers that can populate commonly named properties through reflection using an internal database of values or randomly created data. You can override any of the fillers, give GenFu hints on how to fill them. -
NetArchTest
A fluent API for .Net that can enforce architectural rules in unit tests. -
Expecto
A smooth testing lib for F#. APIs made for humans! Strong testing methodologies for everyone! -
Canopy
f# web automation and testing library, built on top of Selenium (friendly to c# also) -
ArchUnitNET
A C# architecture test library to specify and assert architecture rules in C# for automated testing. -
NFluent
Smooth your .NET TDD experience with NFluent! NFluent is an ergonomic assertion library which aims to fluent your .NET TDD experience (based on simple Check.That() assertion statements). NFluent aims your tests to be fluent to write (with a super-duper-happy 'dot' auto-completion experience), fluent to read (i.e. as close as possible to plain English expression), but also fluent to troubleshoot, in a less-error-prone way comparing to the classical .NET test frameworks. NFluent is also directly inspired by the awesome Java FEST Fluent assertion/reflection library (http://fest.easytesting.org/) -
xBehave.net
✖ An xUnit.net extension for describing each step in a test with natural language. -
Fine Code Coverage
Visualize unit test code coverage easily for free in Visual Studio Community Edition (and other editions too) -
NSpec
A battle hardened testing framework for C# that's heavily inspired by Mocha and RSpec. -
SpecsFor
SpecsFor is a light-weight Behavior-Driven Development framework that focuses on ease of use for *developers* by minimizing testing friction. -
LightBDD
BDD framework allowing to create easy to read and maintain tests. -
snapshooter
Snapshooter is a snapshot testing tool for .NET Core and .NET Framework -
Xunit.Gherkin.Quick
BDD in .NET Core - using Xunit and Gherkin (compatible with both .NET Core and .NET) -
ExpressionToCode
Generates valid, readable C# from an Expression Tree. -
SimpleStubs
*SimpleStubs* is a simple mocking framework that supports Universal Windows Platform (UWP), .NET Core and .NET framework. SimpleStubs is currently developed and maintained by Microsoft BigPark Studios in Vancouver. -
Moq.Contrib.HttpClient
A set of extension methods for mocking HttpClient and IHttpClientFactory with Moq. -
NScenario
Dead simple library for annotating steps of test case scenarios. -
SecTester
SecTester is a new tool that integrates our enterprise-grade scan engine directly into your unit tests.
Access the most powerful time series database as a service
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of CoreBDD or a related project?
README
CoreBDD
BDD framework for xUnit.net
Getting started with CoreBDD
There are several ways to get started with CoreBDD. You can install the dotnet project template via
dotnet new -i corebdd.projecttemplate
Then create a new folder for your test project and run
dotnet new corebdd
Alternatively you can add CoreBDD to an existing xUnit test project via the nuget package
dotnet add package CoreBDD
There is also an optional Command Line tool for running tests with custom output, scaffolding test classes (features/scenarios/steps) and two-way code generation (Gherkin to CoreBDD tests and vice-versa). More documentation on the CLI is available at the bottom of this page.
dotnet tool install -g corebdd.commandline
Finally if you are using VSCode I have made some code-snippets available available here
Writing CoreBDD Tests
Following the usual calculator example, we can start with the following model to test
public class Calculator
{
public int Add(int x, int y) => x + y;
public int Subtract(int x, int y) => x - y;
}
We can define a Feature to collate a suite of scenarios by deriving from the Specification base class and decorating with the Feature attribute. Note both constructors are required to support the different test syntax styles.
[Feature("Calculator",
@"In order to avoid silly mistakes
As a math idiot
I want to be told the sum of two numbers")]
public class CalculatorFeature : Specification
{
public CalculatorFeature(SpecFixture context):base(context)
{
}
public CalculatorFeature()
{
}
}
Once we have created our base Feature, we have several different flavours for writing tests, first we can generate a scenario-per-class (similar to Cucumber style tests) with a method for each Given/When/Then step. To do this simply inherit from the new Feature class, decorate with an Example attribute and provide Given, When, Then methods that will execute in order
[Example("Add two numbers")]
public class AddTwoNumbers : CalculatorFeature
{
readonly Calculator calc;
public AddTwoNumbers(GivenWhenThenFixture state)
: base(state) => calc = new Calculator();
[Given("I have entered {0} into the calculator", 1)]
public void Given(int first) => Context.Given.First = first;
[And("I have also entered {0} into the calculator", 2)]
public void And(int second) => Context.Given.Second = second;
[When("I press add")]
public void When() => Context.When = calc.Add(Context.Given.First, Context.Given.Second);
[Then("the result should be {0}", 3)]
public void Then(int result) => Context.Result.ShouldBe(result);
}
You can also define scenarios in a single method using delgates for each of the steps and allowing for multiple scenarios to be defined within the same class
public class AdvancedCalculator : CalculatorFeature
{
Calculator calculator;
[Scenario("Multiply two numbers")]
public void MultiplyTwoNumbers()
{
Given("I have a calculator", () => calculator = new Calculator());
When("I key in 10", () => calculator.Key(10));
And("I key in 5 and press multiply", () => calculator.Multiply(5));
Then("It sets the Total to 50", () => calculator.Total.ShouldBe(50));
}
[Scenario("Divide two numbers")]
public void DivideTwoNumbers()
{
Given("I have a calculator", () => calculator = new Calculator());
When("I key in 42", () => calculator.Key(42));
And("I key in 5 and press divide", () => calculator.Deivide(5));
Then("It sets the Total to 42", () => calculator.Total.ShouldBe(42));
}
}
The method based syntax also supports data driven tests, using xUnit InlineData (class based scenarios don't support data driven tests just yet).
[ScenarioOutline("Divide two numbers")]
[Examples(10, 2, 5)]
[Examples(20, 4, 5)]
public void DivideTwoNumbers(int number, int divideby, int result)
{
Given($"I have a calculator", () => calculator = new Calculator());
When($"I key in {number}", () => calculator.Key(number));
And($"I key in {divideby} and press divide", () => calculator.Divide(divideby));
Then($"It sets the Total to {result}", () => calculator.Total.ShouldBe(result));
}
You can generate Gherkin specs from your tests using the CoreBDD.SpecGeneration extension library, either by calling from an application or command line tool and passing in the path to the assembly containing tests, or by hooking up your test project to generate the specs after the test run.
To do the latter, first reference the CoreBDD.SpecGeneration library
dotnet add package CoreBDD.SpecGeneration
Next create a Fixture class within your test project, and call GenerateSpecs.OutputFeatureSpecs within the Dispose method, passing in the Assembly (or path to the Assembly) and the output folder for the generated specs.
[CollectionDefinition("CoreBDD")]
public class Collection : ICollectionFixture<GenerateSpecsFixture> { }
public class GenerateSpecsFixture : IDisposable
{
public void Dispose()
{
GenerateSpecs.OutputFeatureSpecs(this.GetType().Assembly.Location, @"..\..\..\Specs\");
}
}
When the tests complete running, a FeatureName.feature file is generated under the Specs folder of the xUnit test project. It generates Gherkin specs for the feature and related scenarios. Example CalculatorFeature.feature :
Feature: Calculator
In order to avoid silly mistakes
As a math idiot
I want to be told the sum of two numbers
Scenario: Add two numbers
Given I have entered 1 into the calculator
And I have also entered 2 into the calculator
When I press add
Then the result should be 3
Scenario: Subtract two numbers
Given I have entered 5 into the calculator
And I have also entered 2 into the calculator
When I press minus
Then the result should be 3
Command Line Tool
The command line tool makes it easy to run tasks such as test execution with Gherkin style output, generating default feature and scenario test files and generating Gherkin feature files from existing tests, or generating tests from existing feature files.
Starting from scratch using the dotnet template and cli tools:
mkdir demobdd
cd demobdd
Next create the new CoreBDD project
dotnet new corebdd
Find CoreBDD tests in current and sub directories and execute tests
corebdd test
Run tests then generate Gherkin .feature files in specified location
corebdd test --specs --output ./Specs
Scaffold a CoreBDD feature class called 'Login' in current folder
corebdd generate feature --name login --namespace demobdd
Scaffold a CoreBDD scenario class called 'LoginToWebsite' under the 'Login' feature
corebdd generate scenario --name LoginToWebsite --feature login --namespace demobdd
Scaffold CoreBDD Tests from existing gherkin '.feature' files, specifiying location of feature files and target folder for generated tests. If you have been following using the 'corebdd' test example, delete the 'Features' folder (leaving the Specs folder with .feature files intact) then run:
corebdd generate tests --path ./Specs --output ./Features --namespace demobdd
You should now have test stubs regenerated using the .feature file scenarios.