单元测试识别上下文

本文关键字:上下文 识别 单元测试 | 更新日期: 2023-09-27 18:09:31

我最近将MVC 4应用程序重写为MVC 5,以便我可以使用ASP。净的身份。我的旧测试设置如下(测试项目中没有连接字符串)

背景:

public class MyDbContext: DbContext {
public MyDbContext() : base("name=DefaultContext") {}...
测试:

var mockVoteSet = new Mock<DbSet<Vote>>();
var mockContext = new Mock<MyDbContext> { CallBase = true };
mockContext.Setup(c => c.Votes).Returns(mockVoteSet.Object);        
var service = new VoteService(mockContext.Object);
var result = service.Vote(1, "1", false);    
//then assert result

这个工作很好,我所有的测试都通过了。

由于移动到我的上下文现在继承自IdentityDbContext:

public class MyDbContext: IdentityDbContext<User> {       
        public MyDbContext() : base("name=DefaultContext") { } ...

现在,当将上下文的模拟传递给测试中的服务时,我得到了一个错误:

没有名为'DefaultContext'的连接字符串应用程序配置文件

我怎样才能绕过这个?

单元测试识别上下文

已经尝试过这样的东西了吗?

Public interface IMyDbContext
{
    DbSet Votes { get; set;}
    void SaveChanges();
}
Public class MyDbContext : IdentityDbContext<User> , IMyDbContext
{
    Public DbSet Votes { get; set;}
    Public void SaveChanges(){
      //...
    }
}
var mockVoteSet = new Mock<DbSet<Vote>>(){ CallBase = true };
var _context = new Mock<IMyDbContext>(MockBehavior.Strict);
_context.Setup(c => c.Votes).Returns(mockVoteSet.Object); 
var service = new VoteService(_context.Object);