我开始使用ef内核在.net内核中为一个(webapi)应用程序编写测试。我想要测试的存储库如下所示:
public class MyRepository : IMyRepository
{
private readonly IDbContext Db;
public MyReporitory(IDbContext db)
{
Db = db;
}
/// Methods to access the Database
public List<MyType> Get() {
return Db.Set<Type>();
}在我的测试中,我现在尝试模拟DBContext:
var dbContextMock = new Mock<IDBContext>();
var classToBeTested = new MyRepository(dbContextMock)
var result = classToBeTested.Get() (or any other method in my repository);
Assert.That(result, Is.TypeOf<MyType>)当我运行测试时,我得到了一个空异常,因为返回的结果是空的(并且我没有告诉mock如何返回数据?)我如何将数据添加到模拟的DbContext中,以便Get()可以获取数据?
发布于 2020-06-02 16:15:42
使用moq setup返回数据。如果我没记错的话,你已经在你的接口中创建了一个Set方法。只需模拟该方法
如果你的set方法返回一个DbSet类型,那么你可以用下面这段代码来模拟它
var mockDbSet = new Mock<DbSet<TestClass>>();
mockDbSet.As<IQueryable<TestClass>>().Setup(m => m.Provider).Returns(data.Provider);
mockDbSet.As<IQueryable<TestClass>>().Setup(m => m.Expression).Returns(data.Expression);
mockDbSet.As<IQueryable<TestClass>>().Setup(m => m.ElementType).Returns(data.ElementType);
mockDbSet.As<IQueryable<TestClass>>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator);数据的类型为IQueryable
https://stackoverflow.com/questions/62147581
复制相似问题