0

我们目前正在通过直接在 Seed 方法中执行 SQL 来实现我们的唯一约束

context.Database.ExecuteSqlCommand(
    "BEGIN TRY ALTER TABLE MyTable ADD CONSTRAINT UC_CODE UNIQUE (COL1, COL2, COL3) END TRY BEGIN CATCH END CATCH");

但是,现在我无法为此正确编写测试。

我模拟了存储库,并插入了两次相同的记录,但是......当然,没有抛出错误,因为实际上并没有调用数据库(也不应该调用),但是我该如何编写一个测试确保插入重复记录时引发错误?

4

2 回答 2

0

我模拟了存储库,并插入了两次相同的记录,但是......当然,没有抛出错误,因为实际上并没有调用数据库(也不应该调用),但是我该如何编写一个测试确保插入重复记录时引发错误?

您误解了模拟和伪造依赖项的观点。伪造的存储库不应该做任何逻辑。如果您测试您的代码将如何对违反唯一约束的行为做出反应,您只需设置您的模拟以引发预期的异常。

于 2013-02-14T19:14:43.070 回答
0

单元测试需要调整要测试的代码。您想测试 EF+DB 对约束违规的反应。因此,您需要在真实(测试)数据库上运行测试,您可以在测试开始时创建该数据库。

于 2013-02-26T21:44:03.227 回答