C# nUnit 测试失败说 SQL 服务器 CE 约束实际上不存在

C# nUnit test failing saying SQL Server CE constraint doesn't exist when it actually does

几天来我一直在努力解决这个问题,我公司似乎没有人能够帮助我,所以,这就是我面临的有趣问题。

我们有一个包含大约 6500 个单元测试的测试套件,其中 650 个与我们如何与 SQL Server 和 SQL Server CE 3.5 数据库交互有关。 SQL 服务器 CE 数据库只是一个本地模式/平面文件 .sdf。正在使用 Resharper / CodeRush 插件进行测试 运行。

现在,所有的单元测试都通过了,除了 SQL Server CE 的单元测试之外-我正在尝试更改 table 以从以下 table 中删除 2 列:

CREATE TABLE Entity
(
    Id UNIQUEIDENTIFIER PRIMARY KEY,
    Name NVARCHAR(256) NOT NULL,
    SerialNumber NVARCHAR(64) NOT NULL,
    EquipmentType NVARCHAR(24) NULL,
    EntityInformationDate DATETIME NULL,
    EntityFamily INT NOT NULL 
        CONSTRAINT DF_Entity_EntityFamily DEFAULT(0)
)

现在,我正在 运行ning 的最新脚本在测试中崩溃 但在生产中有效:

ALTER TABLE Entity DROP CONSTRAINT DF_Entity_EntityFamily
ALTER TABLE Entity DROP COLUMN EntityFamily
ALTER TABLE Entity DROP COLUMN EquipmentType

测试抛出的错误信息是

Common.Utils.DatabaseUpdateException : Failing script is: ALTER TABLE Entity > DROP CONSTRAINT DF_Entity_EntityFamily

System.Data.SqlServerCe.SqlCeException
The foreign key constraint does not exist. [ DF_Entity_EntityFamily ]

此更改的原因是我使用 Guid 创建了一个新的 table 可能的 EntityFamily,所以我正在交换它。

到目前为止我尝试了什么:

是否存在我应该寻找的某种测试同步或顺序问题、线程或其他问题?这真的把我打败了... :(

原来是创建数据库连接对象的继承工厂有问题。

根据测试顺序,可以使用已创建的会话单例进入测试套件的开始,它将指向 SQL 服务器。然后,运行 的测试仅针对 SQL Server CE,它没有 SQL Server 的约束。 运行单独连接测试夹具时,单例为空,因此它将创建正确的连接。

现在我只是让它创建我每次都特别要求的连接。

编辑:仅供参考,当我们将分布在 5 个项目中的单元测试迁移到一个测试项目中时,发现这个问题是造成的。