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