【发布时间】:2020-04-20 20:54:54
【问题描述】:
我正在尝试为 DAL 库(EF 核心)创建单元测试(MSTest v2)
数据服务
public IQueryable<BalanceDTO> GetCollection()
{
var entities = dbContext.Balance;
var dtos = mapper.Map<ICollection<BalanceDTO>>(entities).ToList();
dtos.ForEach(_d =>
{
_d.MonthSort = _d.Date.Month;
_d.MonthName = (new DateTimeFormatInfo()).GetMonthName(_d.MonthSort);
});
return dtos.AsQueryable();
}
public async Task<IList<BalanceDTO>> GetBalancesByYear(int year)
{
return await GetCollection().Where(_d => _d.Date.Year == year).OrderBy(_d => _d.MonthSort).ToListAsync();
}
测试
[TestMethod()]
[DataTestMethod]
[DataRow(2020, 2019)]
public void GetBalancesByYearTest(int found, int notfound)
{
var _configuration = new ConfigurationBuilder()
.SetBasePath(AssemblyProperties.AssemblyDirectory)
.AddJsonFile("appsettings.json")
.Build();
var optionsBuilder = new DbContextOptionsBuilder<AccountManagerContext>();
optionsBuilder.UseSqlServer(_configuration.GetConnectionString("AccountManagerLocalDB"));
var balanceDataService = new BalanceDataService(optionsBuilder);
var elementsFound = balanceDataService.GetBalancesByYear(found);
var elementsNotFound = balanceDataService.GetBalancesByYear(notfound);
Assert.IsNotNull(balanceDataService);
Assert.IsTrue(elementsFound.Result.Count > 0);
Assert.IsTrue(elementsNotFound.Result.Count == 0);
}
但我收到此错误:
InvalidOperationException: The source IQueryable doesn't implement IAsyncEnumerable<AccountManager.DAL.DTO.BalanceDTO>.
Only sources that implement IAsyncEnumerable can be used for Entity Framework asynchronous operations.
我找到了几个链接,但不知道如何解决这个问题。
ToArrayAsync() throws "The source IQueryable doesn't implement IAsyncEnumerable"
知道如何为我的 DataService 方法创建测试吗?
【问题讨论】:
标签: c# unit-testing async-await entity-framework-core mstest