首页 > 解决方案 > 在集成测试期间获取不正确的“用户登录失败”

问题描述

我正在尝试通过实体框架进行一些涉及 SQL 合并过程的集成测试。我在 testinitialize 中有一个 C# 单元测试:

[TestInitialize()]
public void MyTestInitialize() {
    if (Database.Exists("DefaultConnection"))
    {
        Database.Delete("DefaultConnection");
    }
    var people = new Person[]
    {
        new Person()
        {
            createDate=new DateTime(2005,01,01),
            dob=new DateTime(1995,12,25).ToString("M/d/yyyy"),
            firstname="Benjamin",
            lastname="Jacobs"
        },
        new Person()
        {
            createDate=new DateTime(2018,05,13),
            dob=new DateTime(2003,12,25).ToString("M/d/yyyy"),
            firstname="Kenneth",
            lastname="Cobb"
        },
        new Person()
        {
            createDate=new DateTime(2018,05,13),
            dob=new DateTime(2003,12,25).ToString("M/d/yyyy"),
            firstname="Ismael",
            lastname="Glover"
        }
    };
    using(MyContext db=new MyContext()){
        db.People.AddRange(people);
        db.SaveChanges();
    }
}

然后我有一些测试方法来测试合并几种不同类型的数据。我想从一个像上面这样的干净的测试数据库开始。当我单独运行每个测试时,一切都通过了。问题是当我运行所有测试时,只有第一个通过,所有后续的都会抛出错误。

这是错误消息(稍作编辑以删除可识别信息):

初始化方法 MergePeopleTest.MyTestInitialize 抛出异常。System.Data.Entity.Core.EntityException:System.Data.Entity.Core.EntityException:基础提供程序在打开时失败。---> System.Data.SqlClient.SqlException:无法打开登录请求的数据库“MyDatabase”。登录失败。用户“[windows 用户]”登录失败..

删除和重新创建数据库可能不是最好的方法(我愿意听到更好的想法),但似乎这应该可行。我以前做过,没有这个问题。

编辑:错误在第二次测试中被抛出,TestInitialize在它尝试的那一行db.SaveChanges();。据我所知,数据库已被删除,但它并没有自动重新创建代码优先 EF 应有的方式。

标签: c#sql-serverentity-frameworkunit-testingintegration-testing

解决方案


推荐阅读