单元测试识别上下文
本文关键字:上下文 识别 单元测试 | 更新日期: 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);