Home

Awesome

Machine.Specifications

Docs Nuget Discussions License

<img src="https://github.com/machine/machine.specifications/raw/master/src/Machine.Specifications/Resources/Machine.png" alt="MSpec logo" title="Machine.Specifications" align="right" height="100" />

MSpec is called a "context/specification" test framework because of the "grammar" that is used in describing and coding the tests or "specs". The grammar reads roughly like this

When the system is in such a state, and a certain action occurs, it should do such-and-such or be in some end state.

You should be able to see the components of the traditional Arrange-Act-Assert model in there. To support readability and remove as much "noise" as possible, MSpec eschews the traditional attribute-on-method model of test construction. Instead it uses custom delegates that you assign anonymous methods, and asks you to name them following a certain convention.

using Machine.Specifications;

[Subject("Authentication")]
class When_authenticating_an_admin_user
{
    static SecurityService subject;
    static UserToken user_token;

    Establish context = () => 
        subject = new SecurityService();

    Because of = () =>
        user_token = subject.Authenticate("username", "password");

    It should_indicate_the_users_role = () =>
        user_token.Role.ShouldEqual(Roles.Admin);

    It should_have_a_unique_session_id = () =>
        user_token.SessionId.ShouldNotBeNull();
}

Getting Started

  1. Create a .NET Framework or .NET Core library project.
  2. Install Nuget packages as follows:
Install-Package Machine.Specifications
  1. Install the test SDK and Visual Studio runner:
Install-Package Microsoft.NET.Test.SDK
Install-Package Machine.Specifications.Runner.VisualStudio
  1. Optionally, install the assert and mocking libraries:
Install-Package Machine.Specifications.Should
Install-Package Machine.Fakes

Documentation

For project documentation, please visit the wiki.

Training

A PluralSight course by @kevinkuebler is available here.

Get in touch

Discuss with us on Discussions, or raise an issue.

Discussions

Packages

ProjectBuildNuGet
Machine.SpecificationsBuild
Machine.Specifications.ReportingBuild
Machine.Specifications.Runner.ConsoleBuild
Machine.Specifications.Runner.ReSharperBuild
Machine.Specifications.Runner.RiderBuild
Machine.Specifications.Runner.TDNetBuild
Machine.Specifications.Runner.UtilityBuild
Machine.Specifications.Runner.VisualStudioBuild
Machine.Specifications.ShouldBuild
Machine.FakesBuild