Context Injection

Context injection in SpecFlow allows you to share state or context between steps within a scenario or across different scenarios. It provides a way to pass data or objects between steps without using global variables or static properties. Here's an explanation with an example:

1. Define Context Injection:

You can use SpecFlow's scenario context to inject data or objects into your step definitions.

C#
Copy
using TechTalk.SpecFlow;

[Binding]
public class LoginSteps
{
    private readonly ScenarioContext _scenarioContext;

    public LoginSteps(ScenarioContext scenarioContext)
    {
        _scenarioContext = scenarioContext;
    }

    [Given("I am on the login page")]
    public void GivenIAmOnTheLoginPage()
    {
        // Automation logic to navigate to the login page
    }

    [When("I enter my username as '(.*)' and password as '(.*)'")]
    public void WhenIEnterMyUsernameAndPassword(string username, string password)
    {
        _scenarioContext["Username"] = username;
        _scenarioContext["Password"] = password;
    }

    [Then("I should be logged in")]
    public void ThenIShouldBeLoggedIn()
    {
        string username = _scenarioContext["Username"] as string;
        string password = _scenarioContext["Password"] as string;

        // Automation logic to verify login with the provided username and password
    }
}

2. Inject Context into Step Definitions:

  • In your step definitions, you can inject ScenarioContext as a parameter to access the context shared between steps.
  • In the WhenIEnterMyUsernameAndPassword step definition, the provided username and password are stored in the scenario context.
  • In the ThenIShouldBeLoggedIn step definition, the stored username and password are retrieved from the scenario context for verification.

3. Share Data Between Steps:

  • You can now share data or objects between steps within the same scenario or across different scenarios using the scenario context.
  • When a username and password are entered in one step, they can be accessed and used for login verification in subsequent steps.

Context injection in SpecFlow provides a convenient way to share state or context between steps, helping to keep your step definitions clean and decoupled while enabling seamless data sharing within your scenarios.