/Heleonix.Testing

The library for writing tests in BDD and AAA styles

Primary LanguageC#MIT LicenseMIT

Heleonix.Testing

Release: .NET / NuGet

The library for writing tests in BDD and AAA styles

Install

https://www.nuget.org/packages/Heleonix.Testing.NUnit

AAA: Arrange Act Assert

Structure

using global::NUnit.Framework;
using Heleonix.Testing.NUnit.Aaa;
using static Heleonix.Testing.NUnit.Aaa.AaaSpec;

/// <summary>
/// Tests the <see cref="MyComponent"/>.
/// </summary>
[ComponentTest(Type = typeof(MyComponent))]
public static class MyComponentTests
{
    /// <summary>
    /// Tests the <see cref="MyComponent.Member1"/>.
    /// </summary>
    [MemberTest(Name = nameof(MyComponent.Member1))]
    public static void Member1()
    {
        Arrange(() =>
        {
        });

        Act(() =>
        {
        });

        Teardown(() =>
        {
        });

        When("the condition #1 is true", () =>
        {
            Arrange(() =>
            {
            });

            Act(() =>
            {
            });

            Teardown(() =>
            {
            });

            Should("lead to the result #1", () =>
            {
            });
        });

        When("the condition #2 is true", () =>
        {
            Arrange(() =>
            {
            });

            Act(() =>
            {
            });

            Teardown(() =>
            {
            });

            Should("lead to the result #2", () =>
            {
            });
        });
    }

    /// <summary>
    /// Tests the <see cref="MyComponent.Member2"/>.
    /// </summary>
    [MemberTest(Name = nameof(MyComponent.Member2))]
    public static void Member2()
    {
        Arrange(() =>
        {
        });

        Act(() =>
        {
        });

        Teardown(() =>
        {
        });

        When("the action #1 is executed", () =>
        {
            Arrange(() =>
            {
            });

            Act(() =>
            {
            });

            Teardown(() =>
            {
            });

            Should("lead to the result #1", () =>
            {
                Assert.Fail();
            });

            And("the condition #1 is true", () =>
            {
                Arrange(() =>
                {
                });

                Act(() =>
                {
                });

                Teardown(() =>
                {
                });

                Should("lead to the result #2", () =>
                {
                });
            });
        });
    }
}

Tests Output

AAA

BDD: Behavior Driven Development

Structure

using global::NUnit.Framework;
using Heleonix.Testing.NUnit.Bdd;
using static Heleonix.Testing.NUnit.Bdd.BddSpec;

/// <summary>
/// Tests the TheCoolStory.
/// </summary>
[Feature(Name = "The Cool Feature")]
OR
[Story(
    Id = "111",
    Summary = "The cool story",
    AsA = "Product owner",
    IWant = "a cool story",
    SoThat = "I earn a lot of money")]
public static class TheCoolStory
{
    /// <summary>
    /// Tests the Scenario.
    /// </summary>
    [Scenario(Name = "Earn a lot of money in the story")]
    public static void Scenario()
    {
        Given("the precondition #1", () =>
        {
            BeforeEach(() => { });

            AfterEach(() => { });

            When("the action #1 is executed", () =>
            {
                BeforeEach(() => { });

                AfterEach(() => { });

                Then("the result #1 happens", () => { });

                And("the condition #1 is true", () =>
                {
                    BeforeEach(() => { });

                    AfterEach(() => { });

                    Then("the result #2 happens", () => { Assert.Fail(); });
                });
            });

            And("condition #2 is true", () =>
            {
                BeforeEach(() => { });

                AfterEach(() => { });

                When("the action #2 is executed", () =>
                {
                    BeforeEach(() => { });

                    AfterEach(() => { });

                    Then("the result #3 happens", () => { });

                    And("the condition #3 is true", () =>
                    {
                        BeforeEach(() => { });

                        AfterEach(() => { });

                        Then("the result #4 happens", () => { });
                    });
                });
            });
        });
    }
}

Tests Output

BDD

Contribution Guideline

  1. Create a fork from the main repository

  2. Implement whatever is needed

  3. Create a Pull Request. Make sure the assigned Checks pass successfully. You can watch the progress in the PR: .NET GitHub workflows

  4. Request review from the code owner

  5. Once approved, merge your Pull Request via Squash and merge

    IMPORTANT
    While merging, enter a Conventional Commits commit message. This commit message will be used in automatically generated Github Release Notes and NuGet Release Notes

  6. Monitor the Release: .NET / NuGet GitHub workflow to make sure your changes are delivered successfully

  7. In case of any issues, please contact heleonix.sln@gmail.com