Skip to content

Step argument transformations

Marcus Hammarberg edited this page Jan 6, 2015 · 9 revisions

If you want to keep it really short you can use the step transformations that comes with SpecFlow.Assist.Dynamic. A step argument transformation can simplest be described as a way to get typed object for a certain pattern in a Given/When/Then-attribute - see the SpecFlow feature that describes how Step Argument Transformation are used (https://github.com/techtalk/SpecFlow/wiki/Step-Argument-Conversions)

In SpecFlow.Assist.Dynamic three transformations comes out of the box; from SpecFlow Table to dynamic instance, from SpecFlow Table to List and transformation from SpecFlow Table to IEnumerable.

To use these add the following to your app.config-file (under the -node):

<stepAssemblies>
    <stepAssembly assembly="SpecFlow.Assist.Dynamic" /> 
</stepAssemblies>

That configuration is added by default with the NuGet installation script.

Using this step arguments transformation is then as easy as:
Scenario:

Scenario: Test property with step argrument transformation
    Given I create a dynamic instance from this table using step argument transformation
        | Name   | Age | Birth date | Length in meters |
        | Marcus | 39  | 1972-10-09 | 1.96             |
    Then the Name property should equal 'Marcus'  

Step:

    private dynamic _instance;
    [Given(@"I create a dynamic instance from this table using step argument transformation")]
    public void c(dynamic instance)
    {
        _instance = instance;
    }

    [Then(@"the Name property should equal '(.*)'")]
    public void NameShouldBe(string expectedValue)
    {
        ((string)_instance.Name).Should().Equal(expectedValue);
    }  

Clone this wiki locally