c# - 在集成测试期间获取不正确的“用户登录失败”
问题描述
我正在尝试通过实体框架进行一些涉及 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 应有的方式。
解决方案
推荐阅读
- sql-server - 如何禁用 SQL Server 视图?
- javascript - 清除不同表格上的匹配单元格(无序列)
- c++ - 使用 4 位的自定义数据类型
- node.js - 如何在 maven pom.xml 中集成邮递员集合
- google-maps - 在代号中捕捉缩放/平移移动
- css - 附加到文本的图像
- macos - 如何在 MacOS 中查找东亚字符的默认字体
- rest - 什么对象可以作为 github Graphql api 的起点?
- azure - Azure 部署部署参数“dockerRegistryUrl”的值为空
- python - 您可以在同一个变量中输入两个范围值吗?