Boolean parameters for SpecFlow steps
c#, specflow
Solution
You definitely can do that sort of thing, using a `StepArgumentTransformation` method. You still have to write the parser logic, but you can sequester it into a method who's only purpose is to perform that parsing.
Example feature file:
Feature: I win if I am Batman
Scenario: Happy
Given I am the Batman
Then I defeat the Joker
Scenario: Sad
Given I am not the Batman
Then I am defeated by the Joker
Specflow Bindings (C#):
[Binding]
public class IWinIfIAmBatmanFeature
{
private bool iAmBatman;
[StepArgumentTransformation(@"(am ?.*)")]
public bool AmToBool(string value)
{
return value == "am";
}
[Given(@"I (.*) the Batman")]
public void WhoAmI(bool amIBatman)
{
iAmBatman = amIBatman;
}
[StepArgumentTransformation(@"(defeat|am defeated by)")]
public bool WinLoseToBool(string value)
{
return value == "defeat";
}
[Then(@"I (.*) the Joker")]
public void SuccessCondition(bool value)
{
Assert.AreEqual(iAmBatman, value);
}
}
The key factor is that the regex match in your `Given` clause is matched by the step argument transformation. So in `I (.*) the Batman`, if the capture matches the regex in the argument for the StepArgumentTransformation, as it does in the attribute for `AmToBool` then that is the transformation that gets used.
Problem
In SpecFlow, I want to check for the presence of a string in a step definition and at the moment I am doing clunky things like this contrived example: ``` [Given(@"Foo ( bar)?")] public void GivenFoo(string bar) { if (bar == " bar") { // do bar } } ``` However, I'd like to do something like this: ``` [Given(@"Foo ( bar)?")] public void GivenFoo(bool bar) { if (bar) { // do bar } } ``` But I can't find out how, so is this possible and if so how?