实例DbContext ASP.NET CORE的TesteUnit Mock错误

时间:2018-10-28 23:24:17

标签: c# mocking entity-framework-core

我正在尝试在我的项目asp.net核心中使用Testunit,但是我遇到了Mock错误,我的意思是,我无法实例化我的dbContext,我已经尝试了许多教程,但始终返回相同的错误:“ 城堡.DynamicProxy.InvalidProxyConstructorArgumentsException:'无法实例化类MyApp.Context.AppDbContext的代理。 找不到无参数的构造函数。'“

这是我的课堂模型:

    public class Seguro
{

    [Key]
    public int Id { get; set; }
    public string PlacaVeiculo { get; set; }
    public string Endereco { get; set; }
    public string CPF { get; set; }
    public string TipoDeSeguro { get; set; }
    public int TipoSeguroId { get; set; }
    public virtual TipoSeguro  TipoSeguro {get;set;}


}

我的环境:

    public class AppDbContext: DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options)
        : base(options)
    { }

    public virtual DbSet<User> Usuario { get; set; }
    public virtual DbSet<Seguro> Seguros { get; set; }
    public virtual DbSet<TipoSeguro> Tipo { get; set; }

}

我的班级服务测试:

    public class SeguroServiceTest
{

        public  AppDbContext _context;

        public SeguroServiceTest(AppDbContext context)
        {

            _context = context;
        }
        public Seguro SalvarSeguro(Seguro seguro)
        {
            _context.Seguros.Add(seguro);
            _context.SaveChanges();

            return seguro;
        }



}

最后完成我的测试班:

        [TestMethod]
    public void AdicionarSeguro()
    {
        var mockSet = new Mock<DbSet<Seguro>>();// my model class
        var mockContext = new Mock<AppDbContext>();// my context

        mockContext.Setup(x => x.Seguros).Returns(mockSet.Object);
        SeguroServiceTest service = new SeguroServiceTest(mockContext.Object);// here return error


        var seguro = new Seguro
        {
            CPF = "051.879.958-51",
            Endereco = "Rua nacoes",
            PlacaVeiculo = "RTF-6787",
            TipoSeguroId = 1
        };
        service.SalvarSeguro(seguro);

        mockSet.Verify(s => s.Add(It.IsAny<Seguro>()), Times.Once());
        mockContext.Verify(s => s.SaveChanges(), Times.Once());



    }

0 个答案:

没有答案