单元测试IdentityContext

wog*_*les 3 c# moq mocking asp.net-identity

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

背景:

public class MyDbContext: DbContext {
public MyDbContext() : base("name=DefaultContext") {}...
Run Code Online (Sandbox Code Playgroud)

测试:

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
Run Code Online (Sandbox Code Playgroud)

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

因为移动我的上下文现在继承自IdentityDbContext:

public class MyDbContext: IdentityDbContext<User> {       
        public MyDbContext() : base("name=DefaultContext") { } ...
Run Code Online (Sandbox Code Playgroud)

我现在在测试中将上下文的模拟传递给服务时出错:

在应用程序配置文件中找不到名为"DefaultContext"的连接字符串.

我怎么能绕过这个?

ale*_*dro 5

已经尝试过类似的东西?

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);
Run Code Online (Sandbox Code Playgroud)