У меня есть интерфейс хранилища базы данных:
public interface IDbRepository
{
Task<T> GetDataAsync<T>(Func<T, bool> filter = null) where T : class;
}
У меня есть следующее приспособление:
private List<Status> statusList = new List<Status> {
new Status { Name="Status A"},
new Status { Name="Status B"}
};
var repositoryMock = new Mock<IDbRepository>();
Func<Status, bool> filter = It.IsAny<Func<Status, bool>>();
repositoryMock.Setup(repository => repository.GetDataAsync(filter))
.ReturnsAsync(
() =>
{
//NEVER CALLED
if (filter == null)
return statusList.FirstOrDefault();
return statusList.FirstOrDefault(filter);
});
Я использую следующий тест:
[Fact]
public async Task Repository_GetDataAsync_Filter()
{
var repository = repositoryTestFixture.Ioc.Resolve<IDbRepository>();
Func<Status, bool> filter = stat => stat.Name == "Status A";
var res = await repository.GetDataAsync(filter);
//await task1.ContinueWith(ctask => Assert.NotNull(ctask.Result));
Assert.NotNull(res); //ALWAYS NULL!!!
}
Iпопытался отладить, и метод никогда не вызывался, поэтому я всегда получаю неудачный тест.
Согласно @Stephen Cleary, тест не требуется для вызова Wait()
или Result
, а старый официальный способ устарел с VisualStudio 2015, асинхронные тесты поддерживаются "из коробки".
Стивен Клири • https://stephencleary.com/ 11 месяцев назад (2017-11-03 12:22:06 pm) Как отмечалось вБольшое красное знамя вверху страницы, это решение было разработано для VS2010.VS2015 отлично работает с асинхронными тестами модулей из коробки.
Что я должен изменить?