【问题标题】:ASP.NET MVC 3 - Unit Test in RespositoryASP.NET MVC 3 - 存储库中的单元测试
【发布时间】:2012-10-12 16:35:17
【问题描述】:

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

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

测试方法:

[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;
            }
        }

使用 Entity Framework 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; }
    }

谢谢。

【问题讨论】:

    标签: asp.net-mvc-3 unit-testing entity-framework-4.1 ef-code-first


    【解决方案1】:

    对我们来说,这种错误是由于没有传递给 EF 的正确连接字符串而产生的。如果您使用 NUnit,NUnit 不使用您的 app.config 或 web.config,您必须创建您的 assembly.dll.config 或 nunit project.config。请查看 NUnit 文档以了解配置文件的使用。

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

    检查您的配置值,应该可以解决您的问题。

    【讨论】:

    • 我在 Visual Studio 中添加了名为 app.config 的 m XML 文件,测试运行成功,但需要在 NUnit 中运行,将 .dll 中的项目名称重命名为。位于 bin / Debug 目录中的 dll.config 有一个步骤,因为它不起作用。谢谢。
    • 查看nunit.org/index.php?p=configFiles&r=2.2.10,按照以下步骤操作,这应该会有所帮助。谢谢
    【解决方案2】:

    我想

    if (consulta.Count() > 0)
    

    是在抛出错误吗?

    你可以改成

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

    【讨论】:

    • 但是即使进行了这种更改,查询也会返回 null,因为这些测试数据存在于数据库中,但问题仍然存在于与数据库的连接中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多