As usual we are picking up from where we left off. In this brief post we will expand our SpecFlow knowledge by focusing on parameterised the step definitions.
Currently the SpecFlow tests are as follows:
PlayRoundFeature.feature
Feature: Play a single round of Rock Paper Scissors As a player I want to play a round So that I can test my luck Scenario: Computer chooses rock and the player chooses paper Given the computer makes a secret choice of rock When I choose paper Then the result should be “Player Wins!” Scenario: Computer chooses rock and the player chooses scissors Given the computer makes a secret choice of rock When I choose scissors Then the result should be “Computer Wins!”
PlayRoundSteps.cs
namespace RockPaperScissorsTest.Specs.Steps
{
[Binding]
public class PlayRoundSteps
{
private const string GameKey = "Game";
[Given(@"the computer makes a secret choice of rock")]
public void GivenTheComputerMakesASecretChoiceOfRock()
{
var game = new Game(new DescissionEngine());
ScenarioContext.Current.Add(GameKey, game);
}
[When(@"I choose paper")]
public void WhenIChoosePaper()
{
var game = ScenarioContext.Current.Get(GameKey);
game.PlayerMove = "Paper";
}
[When(@"I choose scissors")]
public void WhenIChooseScissors()
{
var game = ScenarioContext.Current.Get(GameKey);
game.PlayerMove = "Scissors";
}
[Then(@"the result should be “Player Wins!”")]
public void ThenTheResultShouldBePlayerWins()
{
var game = ScenarioContext.Current.Get(GameKey);
Assert.AreEqual("Player Wins!", game.Result());
}
[Then(@"the result should be “Computer Wins!”")]
public void ThenTheResultShouldBeComputerWins()
{
var game = ScenarioContext.Current.Get(GameKey);
Assert.AreEqual("Computer Wins!", game.Result());
}
}
}

