Этого можно добиться, используя встроенные атрибуты NUnit TestCaseSource
и TestCaseData
.
[TestCaseSource(nameof(TestCases))]
public List<string> TestTransaction(MetaData data, List<string> ids, string requestedBy)
{
return testObject.UpdateRequest(data, ids, requestedBy).GetAwaiter().GetResult();
}
public static IEnumerable TestCases
{
get
{
//successful
yield return new TestCaseData(new MetaData(), new List<string> { "1", "2" }, "test").Returns(new List<string> { "test1", "test2" });
//failed
yield return new TestCaseData(null, new List<string> { "1", "2" }, "test").Returns(new List<string> { "test1", "test2" });
//another failed
yield return new TestCaseData(new MetaData(), new List<string> { "1", "2" }, string.Empty).Returns(new List<string> { "test1", "test2" });
}
}
Здесь есть пара моментов
- Зачем вам
List
сообщений в методе UpdateRequest
? Он только инициализирован, значения не добавляются. В приведенном выше фрагменте кода список сообщений, возвращаемых методом UpdateRequest
, просто сопоставляется с ожидаемым результатом, но вы также можете написать здесь любой Assert
- Неудачная транзакция зависит от вашей логики, которую вы можете передатьневерные данные, которые вызывают исключение, во фрагменте кода, который я использовал, пустой
Metadata
или requestedBy
async Task<List<string>>
результат возврата выполняется синхронно, чтобы соответствовать ожидаемому результату возврата List<string>
. Источниками асинхронных тестовых примеров являются открытое предложение в NUnit github
Как вариант, вы также можете написать отдельные тесты для успешных и неудачных транзакций и вызвать метод UpdateRequest
асинхронно
Вы еще не поделились подробностями о ваших компонентах, и трудно сделать предположение о DAL, но если вы хотите использовать макеты для Update
методов, вы можете использовать Moq библиотека и использование Task.FromResult
метода для ответов / возвращаемых значений, как описано в этом ответе