У меня есть следующий класс и интерфейсNUnit тестирования асинхронной задачи не в C#
public interface IService
{
Task<double> GetAccDetails(int personId);
}
public class Person
{
private int _personId;
private IService _service;
public Person(int personId, IService service)
{
_personId= personId;
_service = service;
}
public double Amount {get; set;}
public async void UpdateBanckingAcc()
{
Amount = await _service.GetAccDetails(_personId);
}
}
Я пытаюсь написать NUnit тест для этого:
[Test]
public async void Test1([Values(200)]int personId)
{
const double expectedResult = 20;
var serviceMock = new Mock<IAccountService>();
//Here I tried both options:
//serviceMock.Setup(s => s.GetAccDetails(It.Is<int>(id => id == personId)))
// .ReturnsAsync(() => expectedResult);
//And:
serviceMock.Setup(s=> s.GetAccDetails(It.Is<int>(id => id == personId)))
.Returns(() => Task.FromResult<double>(personId));
var person = new Person(personId, serviceMock.Object);
person.UpdateBanckingAcc();
double res = person.Amount;
Assert.AreEqual(expectedResult, res);
}
И тест не пройден. По какой-то странной причине я не могу его отладить.
Так что проблема, которую я вижу здесь вызов:
person.UpdateBanckingAcc();
должно быть
await person.UpdateBanckingAcc();
, но это не нравится, если я использую await
ключевое слово.
Просьба сообщить.
Еще один вопрос: есть ли что-то конкретное в терминах тестирования nunit для методов async, которые я должен тестировать, например, тестирование состояния задачи и т. Д.?
Какую версию NUnit вы используете? В последних версиях должно указываться, что асинхронный тест недействителен. – Charlie