Как лучше использовать ScenarioContext в SpecFlow для удобства обслуживания - PullRequest
0 голосов
/ 25 сентября 2018

В моем тестовом проекте для хранения значений времени выполнения я использую множество переменных тестового контекста в SpecFlow, как показано ниже.Я использую SpecFlow с C # в VS2018.

ScenarioContext.Current["PostResponse"] = postResponse;
ScenarioContext.Current["PutResponse"] = putResponse;

Но в настоящее время произошли некоторые изменения в реализации, и ответ PUT должен быть изменен на ответ POST для создания нового объекта и остается таким же, как при обновлении.Следовательно, теперь я должен обновить каждую часть контекста сценария индивидуально в зависимости от сценариев, и мне необходимо обновить его.Это не умный способ сделать это.Я бы хранил как «objectcreationResponse», «objectupdateResponse» в одном общем месте, было бы проще изменить в одном месте.И я использую много Scneario Context во время выполнения.Есть ли лучший способ его использования?

1 Ответ

0 голосов
/ 04 апреля 2019

Вы можете централизовать это, используя методы расширения C #:

public static class ScenarioContextExtensions
{
    public static UpdateResponseType GetUpdateReponse(this ScenarioContext context)
    {
        return context["updateResponse"] as UpdateResponseType;
    }

    public static void SetUpdateResponse(this ScenarioContext context, UpdateResponseType updateResponse)
    {
        return context["updateResponse"] = updateResponse;
    }
}

Теперь в любом месте, где у вас есть объект ScenarioContext, вы должны строго набирать геттеры и сеттеры для этой общей информации:

ScenarioContext.Current.GetUpdateResponse();
ScenarioContext.Current.SetUpdateResponse(...);

Это позволяет вам использовать все инструменты рефакторинга, доступные в Visual Studio, что должно облегчить проблему, которую вы описываете.

...