TypeMock 隔离器:WillThrow() 跨越单元测试边界流血?
TypeMock Isolator: WillThrow() bleeds across unit test boundaries?
我有两个单元测试使用 TypeMock Isolator 从 asp.net 的 SqlMembershipProvider 中隔离和伪造一个方法。
在测试 1 中我有:
Isolate.WhenCalled(
() =>
Membership.CreateUser(...)))
.WithExactArguments()
.WillThrow(new Exception());
在测试 2 中我有:
Isolate.WhenCalled(
() =>
Membership.CreateUser(...)))
.WithExactArguments()
.WillReturn(new MembershipUser(...));
当我 运行 单独进行每个测试时,它们都成功通过了。
当我 运行 两个测试时,首先测试编号 1 运行s 并通过,然后测试编号 2 运行s 并失败,并在测试 1 中抛出异常。
为什么测试 1 中的 WillThrow()
指令会 "bleed over" 测试 2?毕竟,测试 2 明确定义了不同的行为 - WillReturn()
?
如果 TypeMock 行为在测试之间流血,那么首先要检查的是您是否在测试之间清理。您可以通过调用 Isolater.CleanUp()
或使用 preferred approach 显式地执行此操作,后者用 [Isolated]
属性修饰测试方法或测试 class 本身。
我有两个单元测试使用 TypeMock Isolator 从 asp.net 的 SqlMembershipProvider 中隔离和伪造一个方法。
在测试 1 中我有:
Isolate.WhenCalled(
() =>
Membership.CreateUser(...)))
.WithExactArguments()
.WillThrow(new Exception());
在测试 2 中我有:
Isolate.WhenCalled(
() =>
Membership.CreateUser(...)))
.WithExactArguments()
.WillReturn(new MembershipUser(...));
当我 运行 单独进行每个测试时,它们都成功通过了。
当我 运行 两个测试时,首先测试编号 1 运行s 并通过,然后测试编号 2 运行s 并失败,并在测试 1 中抛出异常。
为什么测试 1 中的 WillThrow()
指令会 "bleed over" 测试 2?毕竟,测试 2 明确定义了不同的行为 - WillReturn()
?
如果 TypeMock 行为在测试之间流血,那么首先要检查的是您是否在测试之间清理。您可以通过调用 Isolater.CleanUp()
或使用 preferred approach 显式地执行此操作,后者用 [Isolated]
属性修饰测试方法或测试 class 本身。