【发布时间】:2021-01-25 15:42:49
【问题描述】:
我有一个这样的服务类:
public class CategoryService: ICategoryService
{
private myContext _context;
public CategoryService(myContext context)
{
_context = context;
}
public async Task<List<CategoryDTO>> GetCategories()
{
return (await _context.Categories.ToListAsync()).Select(c => new CategoryDTO
{
CategoryId = c.CategoryId,
CategoryName = c.CategoryName
}).ToList();
}
}
我的上下文如下所示:
public DbSet<Category> Categories {get;set;}
我对@987654325@ 的单元测试是:
[Fact]
public void TestGetCategories()
{
//Arrange
Mock <myContext> moq = new Mock <myContext>();
var moqSet = new Mock<DbSet<Category>>();
moq.Setup(m => m.Categories).Returns(moqSet.Object);
CategoryService service = new CategoryService(moq.Object);
//Act
var result = service.GetCategories();
//Assert
Assert.NotNull(result);
}
但是我的单元测试出错了。它说:
System.NotSupportedException:不支持的表达式:m => m.Categories
有人可以帮我修复设置部分吗?
【问题讨论】:
-
您是否考虑过使用以下 nuget 包之一来减轻 EF 模拟的痛苦:EntityFrameworkCore.Testing、EntityFrameworkCore3Mock?作为先决条件,请将您的
DbSet属性设为virtual。 -
谢谢你的回答,我试试看。
-
@PeterCsala 非常感谢您的帮助。 “EntityFrameworkCore3Mock”真的很有帮助。
标签: c# asp.net unit-testing moq xunit