Сборка этого файла .feature создаст код для тестов. Затем вам нужно подключить каждый шаг к методу. Самый простой способ сделать это,
1: отладка тестов, тест не пройдёт как неокончательный. Глядя на спецификацию потока результатов теста, вы можете добавить шаблон для этого теста. сообщение об ошибке будет выглядеть примерно так
Assert.Inconclusive не удалось. Не найдено соответствующее определение шага для одного или нескольких шагов.
[Binding]
public class StepDefinition1
{
[Given(@"a user signs up for a 30 day account")]
public void GivenAUserSignsUpForA30DayAccount()
{
}
[When(@"they login in 29 days")]
public void WhenTheyLoginIn29Days()
{
ScenarioContext.Current.Pending();
}
[Then(@"they will be let in")]
public void ThenTheyWillBeLetIn()
{
ScenarioContext.Current.Pending();
}
}
2: Скопируйте это в новый файл определения шага specflow, который в основном является классом модульного тестирования, заполненным атрибутами specflow. Теперь есть несколько приемов, которые вы можете сделать, чтобы помочь вам. в методе GivenAUserSignsUpForA30DayAccount я бы создал пользователя, который будет использоваться в тесте с пробной учетной записью на 30 дней. Закрытый член будет работать нормально, поэтому вы можете получить к ним доступ между методами, но это работает, только если все методы находятся в одном классе. если вы попытаетесь повторно использовать методы между несколькими объектами / классами, вам нужно будет сохранить объект в ScenarioContext
3: при запуске теста specflow он ищет метод, имеющий соответствующий атрибут с той же строкой. Хитрость в том, что вы можете передавать параметры методу, используя подстановочные знаки в Атрибуте метода. Есть 2 разных картотеки
(. *) Означает, что вы передаете строку этому методу
(\ d +) означает, что вы передаете int этому методу.
Поскольку ваш метод When является общим, вы можете использовать его с такими параметрами.
[When(@"they login in (\d+) days")]
public void WhenTheyLoginInDays(int daysRemaining)
{
Account.DaysRemaining = daysRemaining;
}
4: наконец, добавьте ваши Asserts в метод Then, чтобы конечный результат выглядел примерно так. (обратите внимание, что лично я немного реструктурирую формулировку функции и передам ожидаемые результаты таким образом, чтобы логика тестирования не была такой же скверной, как в моем примере, посмотрите схемы сценариев для тестов, управляемых данными)
[Binding]
public class StepDefinition1
{
UserAccount user;
[Given(@"a user signs up for a 30 day account")]
public void GivenAUserSignsUpForA30DayAccount()
{
user = AccountController.CreateNewUser("bob", "password", AccountType.Trial);
}
[When(@"they login in (\d+) days")]
public void WhenTheyLoginInDays(int daysRemaining)
{
Account.DaysRemaining = daysRemaining;
}
[Then(@"they will (.*)")]
public void ThenTheyWillBeLetIn(string expected)
{
//check to see which test we are doing and then assert to see the expected result.
if(string.Compare(expected, "be let in", true)
Assert.AreEqual(LoginResult.Passed, LoginService.Login);
if(string.Compare(expected, "be asked to renew", true)
Assert.AreEqual(LoginResult.Passed, LoginService.Login);
}
}