我目前正在为现有解决方案中的单元测试做 POC。我一直在这里和那里阅读,我看到一个库,我发现做涉及实体框架的测试非常有趣,是 Effort ( https://effort.codeplex.com/ )。
在我的第一次测试中,Effort 很好地模拟了我的数据库上下文,没有抛出奇怪的错误,大多数操作都很好,比如添加一条新记录并在表具有标识时增加我的主键,在那一刻很好,直到我遇到了一个涉及具有唯一键的表的情况。
这是我目前的情况:
数据库优先模型。
上下文和实体都没有唯一键规则,因此如果 Effort 在“内存中”工作,则唯一键必须存在于代码中,因此 Effort 在此过程中使用它,所以我在我的实体中手动添加了唯一键只是为了测试它,我在我的类(实体)的三个属性(字段)中添加了它:
[索引(“UK_WhateverName”,IsUnique = true,Order = 1)]
[索引(“UK_WhateverName”,IsUnique = true,Order = 2)]
[索引(“UK_WhateverName”,IsUnique = true,Order = 3)]
该方法内部有一个 try catch,try 内部是 dbcontext.SaveChanges()。在实际情况下,当违反唯一键规则时会捕获 DbUpdateException,因此当这种情况发生时,该方法将返回 -1。
我假设即使 Effort 能够捕获唯一键故障,它也可能不会抛出 DbUpdateException,因此我添加了一个额外的捕获来捕获异常,即任何可能发生的异常。
该代码在实际条件下工作正常,当唯一密钥被侵犯时返回-1。
使用 Effort 的当前结果是代码通过没有任何问题,它没有捕获唯一键失败,甚至在 Exception 捕获中也没有,并且测试通常会以递增主键的方式保存它。
是否可以努力模拟唯一密钥失败?,我错过了什么吗?
提前感谢您的帮助。