我已经能够DbSet使用此链接模拟来自Moq的实体框架.
但是,我现在想知道如何模拟对SqlQuery的调用.不确定这是否可行或者如何依赖于模拟的db上下文知道正在调用什么"查询".
以下是我想要嘲笑的内容.
var myObjects = DbContext.Database
.SqlQuery<MyObject>("exec [dbo].[my_sproc] {0}", "some_value")
.ToList();
Run Code Online (Sandbox Code Playgroud)
我目前还没有尝试任何东西,因为不知道如何开始嘲笑这个例子.
的嘲讽DbSet是下方再次重申,我可以正确模拟返回DbSet的MyObject的,但现在我试图嘲弄返回列表SQLQuery对MyObject的.
var dbContext = new Mock<MyDbContext>();
dbContext.Setup(m => m.MyObjects).Returns(mockObjects.Object);
dbContext.Setup(m => m.Database.SqlQuery... something along these lines
Run Code Online (Sandbox Code Playgroud) 虽然我知道这个问题/答案(单元测试一种调用另一种方法的方法),但仍然不确定什么是对同一类调用另一个公共方法的方法进行单元测试的最佳方法?
我做了一个示例代码(也可以在这里看到:dotnetfiddle.net/I07RMg)
public class MyEntity
{
public int ID { get; set;}
public string Title { get; set;}
}
public interface IMyService
{
MyEntity GetEntity(int entityId);
IEnumerable<MyEntity> GetAllEntities();
}
public sealed class MyService : IMyService
{
IRepository _repository;
public MyService(IRepository repository)
{
_repository = repository;
}
public MyEntity GetEntity(int entityId)
{
var entities = GetAllEntities();
var entity = entities.SingleOrDefault(e => e.ID == entityId);
if (entity == null)
{
entity = new MyEntity { ID = -1, …Run Code Online (Sandbox Code Playgroud)