C# 单元测试识别上下文

C# 单元测试识别上下文,c#,mocking,moq,asp.net-identity,C#,Mocking,Moq,Asp.net Identity,我最近将一个MVC4应用程序重写为MVC5,以便使用ASP.NET标识。我以前的测试设置如下(我在测试项目中没有连接字符串) 背景: public class MyDbContext: DbContext { public MyDbContext() : base("name=DefaultContext") {}... 测试: var mockVoteSet=new Mock(); var mockContext=newmock{CallBase=true}; Setup(c=>c.vots

我最近将一个MVC4应用程序重写为MVC5,以便使用ASP.NET标识。我以前的测试设置如下(我在测试项目中没有连接字符串)

背景:

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

var mockVoteSet=new Mock();
var mockContext=newmock{CallBase=true};
Setup(c=>c.vots).Returns(mockVoteSet.Object);
var服务=新的VoteService(mockContext.Object);
var结果=服务投票(1,“1”,错误);
//然后断言结果
这很有效,我所有的测试都通过了

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

public class MyDbContext: IdentityDbContext<User> {       
        public MyDbContext() : base("name=DefaultContext") { } ...
公共类MyDbContext:IdentityDbContext{
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);
公共接口IMyDbContext
{
DbSet投票{get;set;}
void SaveChanges();
}
公共类MyDbContext:IdentityDbContext,IMyDbContext
{
公共数据库集投票{get;set;}
公共void SaveChanges(){
//...
}
}
var mockVoteSet=new Mock(){CallBase=true};
var_context=newmock(MockBehavior.Strict);
_Setup(c=>c.vots).Returns(mockVoteSet.Object);
var服务=新的VoteService(_context.Object);

谢谢!它只是缺少MyDbContext中SaveChanges()的实现
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);