BunsenBurner 1.3.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package BunsenBurner --version 1.3.0                
NuGet\Install-Package BunsenBurner -Version 1.3.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="BunsenBurner" Version="1.3.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add BunsenBurner --version 1.3.0                
#r "nuget: BunsenBurner, 1.3.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install BunsenBurner as a Cake Addin
#addin nuget:?package=BunsenBurner&version=1.3.0

// Install BunsenBurner as a Cake Tool
#tool nuget:?package=BunsenBurner&version=1.3.0                

Bunsen Burner Core

Nuget

This provides the core dependency free test abstraction that Bunsen Burner is built on.

Getting Started

To use this library, simply include BunsenBurner.dll in your project or grab it from NuGet, and add this to the top of each test .cs file that needs it:

using static BunsenBurner.Aaa; // For Arrange act assert

or

using static BunsenBurner.Bdd; // For Given when then

What?

The type that makes this library possible is a Scenario.

This is an ADT that models a single test. It has the following structure,

Scenario<
 // Supported Syntax, either arrange act assert (Aaa) or given when then (Bdd)
    TSyntax
>.(
 // Scenario that has been arranged and is ready to act on, returning a TData   
    Arranged<TData> | 
 // Scenario that has been acted on, taking a TData returning a TResult and is ready to assert against 
    Acted<TData, TResult> | 
 // Scenario that is asserted against a TResult. This can be run.
    Asserted<TData, TResult>)

This structure represents a lazy asynchronous immutable test that can be composed and later run.

The aim is for the type parameters to be fully inferable. There are a few edge cases to this, but the core abstractions require no provided type parameters.

How to use

To start using it import either the Aaa or Bdd syntax and start composing the test.

Arrange, Act, Assert

using static BunsenBurner.Aaa;

[Fact(DisplayName = "Some simple test")]
public async Task Case1() =>
  await Arrange(() => 1)
      .And(x => x.ToString())
      .Act(x => x.Length)
      .And((_, r) => r + 1)
      .Assert((_, r) => Assert.Equal(2, r));

Given, When, Then

using static BunsenBurner.Bdd;

[Fact(DisplayName = "Some simple test")]
public async Task Case1() =>
  await Given(() => 1)
      .And(x => x.ToString())
      .When(x => x.Length)
      .And((_, r) => r + 1)
      .Then((_, r) => Assert.Equal(2, r));

The test is run using a custom awaiter, so async await is required.

Also as the pipeline is fully async, you need to always await a Scenario, even if all your components are synchronous.

Benefits

  • Standardised - All tests are built on the same abstraction, it can model any test,
    • Must be composed in the correct sequence
      • Arrange/Given
      • Act/When
      • Assert/Then
    • And steps can be used between to allow for transformations
  • Data driven - Scenarios are just data, can be passed to and from functions, can be put in a list, assigned to variables
  • Composable - Both within a single test and over multiple tests
    • Write custom extension methods to extend the syntax in any direction, with the comfort of knowing it will make sure the developer uses it correctly. Just look at the other libraries provided for inspiration
    • Functional first, its just data with functions that operate on that data
  • Readable - Enforced structures with no easy way to shoot yourself in the foot, should result in code that is easier to maintain and read
  • Simple - 1 data type, and functions that operate on it
  • Flexible
    • No dependencies
    • No assumptions around test frameworks
    • No assumptions around SUT
    • No requirements on the user code
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

    • No dependencies.

NuGet packages (12)

Showing the top 5 NuGet packages that depend on BunsenBurner:

Package Downloads
BunsenBurner.Http

Extension methods for testing Http servers

BunsenBurner.Verify.Xunit

Integration with [Verify.Xunit](https://github.com/VerifyTests/Verify) to simplify assert steps

BunsenBurner.AutoFixture

Integration with [AutoFixture](https://github.com/AutoFixture) to simplify arrange steps

BunsenBurner.Bogus

Integration with [Bogus](https://github.com/bchavez/Bogus) to simplify arrange steps

BunsenBurner.Hedgehog

Integration with [Hedgehog](https://github.com/hedgehogqa/fsharp-hedgehog) to write property based tests

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
7.0.0 1,566 6/23/2024
6.2.4 13,764 6/20/2023
6.2.3 1,487 6/5/2023
6.2.2 3,527 4/25/2023
6.2.1 4,887 3/11/2023
6.2.0 2,819 1/29/2023
6.1.1 3,285 1/19/2023
6.1.0 4,536 1/12/2023
6.0.0 2,598 1/11/2023
5.3.1 2,681 1/7/2023
5.3.0 2,655 1/6/2023
5.2.0 2,713 12/17/2022
5.1.0 3,018 12/12/2022
5.0.0 2,702 12/11/2022
4.0.1 2,695 12/11/2022
4.0.0 2,717 12/11/2022
3.0.0 2,675 12/10/2022
2.2.0 2,641 12/9/2022
2.1.0 2,649 12/9/2022
2.0.0 2,758 12/9/2022
1.6.2 3,044 12/2/2022
1.6.1 2,987 12/1/2022
1.6.0 2,908 11/30/2022
1.5.1 3,062 11/26/2022
1.5.0 3,001 11/21/2022
1.4.1 2,412 11/19/2022
1.4.0 2,336 11/19/2022
1.3.0 2,198 11/19/2022
1.2.1 2,030 11/17/2022
1.2.0 2,091 11/16/2022
1.1.1 2,131 11/15/2022
1.1.0 2,023 11/15/2022
1.0.4 1,716 11/8/2022
1.0.3 1,838 11/6/2022
1.0.2 1,861 11/6/2022
1.0.1 1,840 11/6/2022
1.0.0 1,851 11/6/2022