Answers:
附录:如其他答案所述,的目的.Verifiable是让a Setup进入一组“延迟的Verify(...)呼叫”,然后可以通过触发这些呼叫mock.Verify()。
OP的澄清清楚地表明,这是目标,唯一的问题是弄清楚为什么它不起作用,但是正如@Liam劝说的那样,答案也应该真正涉及到这一点:-尽我所能,关键用例看到的是:
mock.Setup()和之间的干燥度mock.VerifyVerify调用本身断开(例如,您可以使用另一种帮助方法进行设置)...然后回到我的回答,简洁地说:“要小心,因为通常认为上述优点不利于实现这些目标对测试的易读性和可维护性的影响,而测试的易读性和可维护性过于依赖于此类结构”
原文:请注意,在可能的情况下,应改用AAA布局,因此在完成工作后应进行显式mock.Verify( expression )调用,而不是mock.Setup( ... ).Verifiable()与a mock.Verify()或mock.VerifyAll()任何可能的配对(贷方:@kzu)。
Verifyable()/ 的好处,我仍然不相信VerifyAll()。我当前的单元测试有大量Setup(...)调用(> 30)。可以使用等效的Verify()将每个匹配,以满足约定,但这会导致大量的代码重复,并且随着单元测试数量的增加,维护和读取起来会更加棘手。我想我真正要问的是,如果存在大量设置,是否可以设置例外Verifiable()?还是避免硬性规定?
Setup和a 之间Verify,可能会错过更高的胜利,只能按照AAA和强烈暗示的策略系列所建议的方式放宽DRY约束