TypeMock Isolator:WillThrow() 跨越单元测试边界?

Posted

技术标签:

【中文标题】TypeMock Isolator:WillThrow() 跨越单元测试边界?【英文标题】:TypeMock Isolator: WillThrow() bleeds across unit test boundaries? 【发布时间】:2015-09-09 19:52:01 【问题描述】:

我有两个单元测试使用TypeMock Isolator 来隔离和伪造来自asp.net 的SqlMembershipProvider 的方法。

在测试 1 中我有:

        Isolate.WhenCalled(
            () =>
                Membership.CreateUser(...)))
            .WithExactArguments()
            .WillThrow(new Exception());

在测试 2 中我有:

        Isolate.WhenCalled(
            () =>
                Membership.CreateUser(...)))
            .WithExactArguments()
            .WillReturn(new MembershipUser(...));

当我自己运行每个测试时,它们都成功通过了。

当我运行这两个测试时,测试 1 首先运行并通过,然后测试 2 运行并失败,并在测试 1 中抛出异常。

为什么测试 1 中的 WillThrow() 指令会“溢出”到测试 2?毕竟,测试 2 明确定义了不同的行为 - WillReturn()?

【问题讨论】:

你还没有包含完整的 sn-p,所以我会问一个明显的问题......测试/类是否被标记为 Isolated 属性,或者你打电话给 @987654328 @重置行为? typemock.com/rule-missing-isolated-attribut @forsvarir 谢谢。添加[Isolated] 属性解决了这个问题。您想将此作为答案发布,以便我接受吗? 【参考方案1】:

如果 TypeMock 行为在测试之间流血,那么首先要检查的是您在测试之间进行清理。您可以通过调用Isolater.CleanUp() 或使用preferred approach 来显式地做到这一点,这是用[Isolated] 属性装饰测试方法或测试类本身。

【讨论】:

以上是关于TypeMock Isolator:WillThrow() 跨越单元测试边界?的主要内容,如果未能解决你的问题,请参考以下文章

如何测量模拟框架 (TypeMock) 的开销?

干货抗干扰利器之光耦使用

干货抗干扰利器之光耦使用

抗干扰神器光耦的原理及应用

厉害了,这个抗干扰利器,快来了解一下

厉害了,这个抗干扰利器,快来了解一下