Scenarios with examples - adamralph/xbehave.net GitHub Wiki

xBehave.net allows the passing of example values for the parameters in a scenario method.

This is equivalent to Cucumber's Scenario Outlines and works in a similar manner to xUnit.net's [Theory] attribute for data driven testing.

E.g.

[Scenario]
[Example(1, 2, 3)]
[Example(2, 3, 5)]
public void Addition(int x, int y, int expectedAnswer, Calculator calculator, int answer)
{
    $"Given the number {x}"
        .x(() => { });

    $"And the number {y}"
        .x(() => { });

    "And a calculator"
        .x(() => calculator = new Calculator());

    "When I add the numbers together"
        .x(() => answer = calculator.Add(x, y));

    $"Then the answer is {answer}"
        .x(() => Assert.Equal(expectedAnswer, answer));
}

results in this output: xUnit.net console examples output

There are few things to note here:

  • Each parameter which does not have a corresponding example value (based purely on number of values/parameters) continues to have its default value passed (null for reference types and zero values for value types).
  • You are not limited to using only the [Example] attribute for providing values. Any attribute which inherits from the xUnit.net's DataAttribute will also work, including xUnit.net's own [ClassData] and [MemberData].
  • Each [Example] effectively generates a new scenario.