Joh*_*son 8 c# entity-framework moq
我读过使用 moq 时不能模拟非虚拟函数。我也读到这现在应该是可能的..这是真的吗?如果是这样,那么我想模拟以下查询:
DatabaseContext.Database.ExecuteSqlCommand(updateQuery, newValue);
Run Code Online (Sandbox Code Playgroud)
我在我的测试中覆盖了上下文
DAL.Context.DatabaseContext = mockContext.Object;
Run Code Online (Sandbox Code Playgroud)
我试过这个设置,但似乎查询仍然重复我的常规数据库
mockContext.Setup(c => c.Set<AppSalesAndResult>()).Returns(mockBudgetData.Object);
Run Code Online (Sandbox Code Playgroud)
任何想法,也许可以用其他东西替换executesqlcommand,以便上面的行可以捕获该集合的任何更新?由于性能原因,我在一次更新多行时使用 executesqlcommand。普通EF太慢
更新:
阅读下面的文章,How to Moq Entity Framework SqlQuery call我想知道类似的实现是否适用于 ExecuteSQLCommand...
mqu*_*eia 11
我所做的是能够模拟 ExecuteSqlCommand,这在 DataBase 类中是不可能的,是在我的 DbContext 继承中创建相同的方法,但这次是虚拟的,并调用 Database.ExecuteSqlCommand
public class MyDbContext : DbContext
{
public virtual int ExecuteSqlCommand(string sql, params object[] parameters)
{
return Database.ExecuteSqlCommand(sql, parameters);
}
public virtual int ExecuteSqlCommand(TransactionalBehavior transactionalBehavior, string sql, params object[] parameters)
{
return Database.ExecuteSqlCommand(transactionalBehavior, sql, parameters);
}
Run Code Online (Sandbox Code Playgroud)
然后我改变了我的业务代码来调用这个创建的方法(不是数据库方法):
DatabaseContext.ExecuteSqlCommand(updateQuery, newValue);
Run Code Online (Sandbox Code Playgroud)
然后,它工作
| 归档时间: |
|
| 查看次数: |
3375 次 |
| 最近记录: |