- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 localdb 进行单元测试。测试按一定顺序执行(不按顺序执行的测试预计会失败)。
过去,我尝试过 InMemory,但失败了,因为它不是关系型的,而 SQLite 失败了,因为我们的一些请求没有返回数据 ( List<Guid>().Contains(Guid)
)
在执行测试之前,我有静态方法来设置测试环境。
localDb 的连接字符串:
private static string LocalDBConnection = "Server=(localdb)\\DbInstance;Database=UnitTest; Integrated security=True";
DbInstance
使用 MartinCostelo.SlLocalDb...
创建
之后我创建服务提供商,并注册dbContext
.
为了确保每次都有干净的启动,我在每次运行时删除并重新创建测试数据库:
dbContext.Database.EnsureDeleted();
dbContext.Database.EnsureCreated();
这段代码在办公室的每台计算机上都能完美执行。它在用户本地文件夹中创建 UnitTest 数据库。
但是,当我尝试在 Azure 管道上构建解决方案时,它不会创建数据库,因为环境不同。我应该在执行测试的同一文件夹下创建数据库,但是...
使用数据库位置的连接字符串:
private static string LocalDBConnection = "Server=(localdb)\\DbInstance;Database=UnitTest; Integrated security=True; AttachDBFilename=.\\UnitTest.mdf";
这应该在执行测试的同一位置创建数据库。
EF Core 执行 Ensuredeleted 和 EnsureCreatedEnsureDeleted 返回 false(失败,但不会使事情变得复杂)EnsureCreated 转换为 SQL 如下:
CREATE DATABASE [UnitTest]
ON (NAME = N'UnitTest', FILENAME = N'C:\Dev\somefolders\bin\Debug\netcoreapp3.1\UnitTest.mdf')
LOG ON (NAME = N'UnitTest_log', FILENAME = N'C:\Dev\somefolders\bin\Debug\netcoreapp3.1\UnitTest_log.ldf');
Microsoft.EntityFrameworkCore.Database.Command: Information: Executed DbCommand (57ms) [Parameters=[], CommandType='Text', CommandTimeout='60']
IF SERVERPROPERTY('EngineEdition') <> 5
BEGIN
ALTER DATABASE [UnitTest] SET READ_COMMITTED_SNAPSHOT ON;
END;
执行此操作会抛出 SqlException:无法将文件“.\UnitTest.mdf”附加为数据库“UnitTest”。
更新:
EnsureCreated
实际上创建了数据库(它在 SQL Server Management Studio 中可见),但它等待超时,然后抛出异常。
如果我停止测试执行并再次重新运行它(数据库存在于磁盘上),则 EnsureCreated
立即抛出异常:
Exception thrown: 'Microsoft.Data.SqlClient.SqlException' in
Microsoft.EntityFrameworkCore.Relational.dll
Database 'UnitTest' already exists. Choose a different database name.
如前所述,EnsureDeleted
没有尽到自己的职责。
所有的麻烦都与使用AttachDbFilename
有关。在连接字符串中...
有关如何解决此问题的任何想法,因为我的 Azure 版本无法在此设置中进行测试:-)
谢谢克曾德拉
最佳答案
建议使用SQLite in memory database用于集成测试 Entity Framework Core。您应该修复失败的测试,而不是使用 LocalDb。
示例:
public class SqliteInMemoryItemsControllerTest : ItemsControllerTest, IDisposable
{
private readonly DbConnection _connection;
public SqliteInMemoryItemsControllerTest()
: base(
new DbContextOptionsBuilder<ItemsContext>()
.UseSqlite(CreateInMemoryDatabase())
.Options)
{
_connection = RelationalOptionsExtension.Extract(ContextOptions).Connection;
}
private static DbConnection CreateInMemoryDatabase()
{
var connection = new SqliteConnection("Filename=:memory:");
connection.Open();
return connection;
}
public void Dispose() => _connection.Dispose();
}
关于azure - 使用 LocalDb 与 EF Core 项目 + Azure 管道进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62910319/
我在集成测试环境中使用 LocalDb - 在测试运行之前和之后实例化和处理我的实例。 但是,当我在我的实例中创建一个数据库时,它仍然会将我的表和数据刷新到磁盘。是否可以在“内存中”模式下运行 Loc
我使用的是 SQL Server 2014 Express 和 LocalDB 选项,并且 Visual Studio 2013 中的 SQL Server 对象资源管理器 Pane 中有以下内容..
重现步骤。 列出现有实例: > sqllocaldb info v11.0 停止指定名称的实例: > sqllocaldb stop "v11.0" Stop of LocalDB instance
我无法在开发人员机器上添加数据库。 我正在运行 win 10,visual studio 2015。 我重新安装了 SQL Server 2016 两次,上次禁用了防火墙,最后都给了绿色标记。 虽然我
我将VS2012和SSME 2012与localdb一起安装,发现有两台服务器可以连接到:(localDB)\v11.0和(localDB)\Projects。 我必须使用它们中的哪一个来执行,它们分
我们的应用程序使用 SQL Server LocalDb 2014 作为数据库引擎。我们使用的连接字符串是 "Data Source=(localdb)\MSSQLLOCALDB;Initial Ca
我刚刚完成了 VS2015 的全新安装 更新 2 在一个新工作站上,并开始运行一些使用 SQL LocalDb 的集成测试。他们失败了以下 SqlException : Additional info
当我尝试从 C# 访问数据库时,出现此异常。 我的连接字符串是 Data Source=(localdb)\v11.0;integrated security=true;User Instance =
我使用 SqlLocalDb.msi 包安装了 LocalDb,并且可以使用服务器名称 (LocalDb)\v11.0 使用 SSMS 连接到它。到目前为止,一切都很好。问题是,当我尝试通过 .NET
我正在尝试在本地复制生产环境,而生产数据库使用链接服务器。我已经能够创建 localdb 的多个实例;是否可以在 localdb 实例之间创建链接服务器?如果没有,我还有哪些其他选项可用(理想情况下不
我首先使用实体框架 6 代码。 目前我有一个用于生产的数据库。我想为测试添加一个不同的数据库。我怎么做? 我的测试项目中是否需要另一个连接字符串? 这两个连接字符串应该有什么区别? 我尝试复制连接
我以前从未在应用程序中使用过 LocalDB。我有两个问题: 1) LocalDB 仅用于测试还是有时会在实际环境中推出?2) 我注意到连接字符串因 PC 而异。例如,请查看下面适用于我的台式电脑(使
我正在尝试运行一个 IIS 托管的应用程序(以电影数据库的形式)来自学如何设计一个 3 层架构程序:MVC 应用程序、WCF 服务、SQL Server 数据库。因为我没有完整的 SQL Server
我正在尝试在 Ubuntu 17.04 上启动 .Net Core 2.0 应用程序。我之前在 Windows 10 上开发过它并且运行良好。问题是,当我运行 dotnet ef database u
我正在尝试为我的 ASP.NET Web API 项目编写单元/集成测试,并努力单独运行每个测试。请允许我解释一下。 我有一个配置了部署设置的 *.testsettings 文件。在每次测试运行之前,
我正在尝试为我的 Windows 窗体应用程序创建备份和恢复功能。 因此,我尝试进行数据库恢复。我的代码是这样的: string cbdfilename = "c:\\Users\\Public\\P
如何删除已删除其文件的 SQL LocalDB 数据库? 删除数据库会产生以下消息: Unable to open the physical file "C:\Users\Public\Documen
我有以下 F# 脚本。我从正在运行的 Asp.net Mvc 项目复制了连接字符串。但是,它出现以下错误。连接字符串应该正确,因为 Asp.Net Mvc 项目工作正常。或者 F# 类型提供程序不接受
我使用本地开发的网站收集了一堆数据。现在我需要分析数据,但我似乎无法找到我的网站使用的 LocalDB 数据库的 .mdf 文件。 查看数据连接,显示myusername\localdb#abunch
我有一个像这样的 VS 2012 解决方案设置: 英孚模型项目 EF模型测试项目 ASP.NET MVC 4 应用程序 WCF数据服务项目 在开发过程中,我想使用 LocalDB 作为 EF 的后备数
我是一名优秀的程序员,十分优秀!