EF Code First,Unique Constraint和Testing

时间:2013-02-14 15:33:13

标签: unit-testing entity-framework-5 code-first unique-constraint

我们目前正在通过在Seed方法

中直接执行SQL来实现我们的唯一约束
context.Database.ExecuteSqlCommand(
    "BEGIN TRY ALTER TABLE MyTable ADD CONSTRAINT UC_CODE UNIQUE (COL1, COL2, COL3) END TRY BEGIN CATCH END CATCH");

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

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

2 个答案:

答案 0 :(得分:0)

  

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

你误解了嘲弄和伪装依赖关系。伪造的存储库不应该做任何逻辑。如果您测试代码对唯一约束违规的反应,您只需设置模拟以抛出预期的异常。

答案 1 :(得分:0)

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