2014-06-19 12 views
3

我最近將MVC 4應用程序重寫爲MVC 5,以便我可以使用ASP.NET身份。我的老測試設置如下(我在測試項目中沒有連接字符串)單元測試IdentityContext

方面:

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'可以在 應用程序配置文件中找到。

我該如何解決這個問題?

回答

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); 
+0

謝謝!它只是缺少在MyDbContext中實現SaveChanges() – woggles