Asp.net mvc 3 ASP.NET MVC 3-Respository中的单元测试

Asp.net mvc 3 ASP.NET MVC 3-Respository中的单元测试,asp.net-mvc-3,unit-testing,entity-framework-4.1,ef-code-first,Asp.net Mvc 3,Unit Testing,Entity Framework 4.1,Ef Code First,我正在使用一个类测试来检查正确完成的登录实体,但是出现了一个错误,似乎没有返回数据库中的查询,但是在ASP.NET MVC 3代码中开发的应用程序首先返回数据,我想知道什么是错误的,以及可以做些什么来解决它 返回查询后,变量中会显示以下消息: “枚举未产生结果” 试验方法: [TestMethod()] public void efetuarLoginTest() { EntidadeRepository target = new EntidadeRepository()

我正在使用一个类测试来检查正确完成的登录实体,但是出现了一个错误,似乎没有返回数据库中的查询,但是在ASP.NET MVC 3代码中开发的应用程序首先返回数据,我想知道什么是错误的,以及可以做些什么来解决它

返回查询后,变量中会显示以下消息: “枚举未产生结果”

试验方法:

[TestMethod()]
public void efetuarLoginTest()
{
            EntidadeRepository target = new EntidadeRepository();
            string cnpj = "12345678";
            string senha = "lalado";
            Entidade expected = null; // TODO: Initialize to an appropriate value
            Entidade actual;
            actual = target.efetuarLogin(cnpj, senha);
            Assert.AreNotEqual(expected, actual);
}
具有返回登录查询任务的实体的方法存储库:

public Entidade efetuarLogin(string cnpj, string senha)
        {

            var consulta = from usu in bd.Entidades
                           where usu.cnpj == cnpj && usu.senha == senha
                           select usu;

            if (consulta.Count() > 0)
            {
                Entidade e = new Entidade();
                e.id_entidade = consulta.First().id_entidade;
                e.razao_social = consulta.First().razao_social;
                e.cnpj = consulta.First().cnpj;
                e.senha = consulta.First().senha;

                return e;
            }
            else
            {
                return null;
            }
        }
使用实体框架4.1对持久性数据库进行分类:

internal class BancoDados: DbContext
    {
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<System.Data.Entity.ModelConfiguration.Conventions.PluralizingEntitySetNameConvention>();
            modelBuilder.Conventions.Remove<System.Data.Entity.ModelConfiguration.Conventions.PluralizingTableNameConvention>();

            base.OnModelCreating(modelBuilder);
        }

        public DbSet<Entidade> Entidades { get; set; }
        public DbSet<Estado> Estados { get; set; }
        public DbSet<Administrador> Administradores { get; set; }
        public DbSet<Leilao> Leiloes { get; set; }
        public DbSet<Lance> Lances { get; set; }
    }
内部类BancoDados:DbContext
{
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
modelBuilder.Conventions.Remove();
基于模型创建(modelBuilder);
}
公共数据库集实体{get;set;}
公共数据库集Estados{get;set;}
公共数据库集管理器{get;set;}
公共DbSet Leiloes{get;set;}
公共DbSet Lances{get;set;}
}
谢谢。

我想

if (consulta.Count() > 0)
是抛出错误吗

你可以把它改成

if (consulta != null && consulta.Count() > 0)

对于我们来说,由于没有将正确的连接字符串传递给EF,因此生成了此类错误。如果您正在使用NUnit,NUnit不使用app.config或web.config,则必须创建assembly.dll.config或NUnit project.config。请查看NUnit文档以了解配置文件的使用情况

您可以通过在调试模式下检查DbContext.Database及其属性来验证传递给NUnit的连接字符串/


检查配置值可以解决问题。

但即使进行此更改,查询也会返回null,因为这些测试数据存在于数据库中,但问题仍然存在于与数据库的连接中。我在visual studio中添加了名为app.config的m XML文件,测试运行成功,但需要在NUnit中运行,并在中重命名项目名称。dll到。位于bin/Debug目录中的dll.config有一步一步的操作,因为它不工作。谢谢。退房,按照以下步骤操作,这应该会有所帮助。谢谢