不能对一个类型多次调用 Swap.AllInstances()

Can not call Swap.AllInstances() more than once on a type

我有一个测试用例有问题,标题中的异常被抛出。

仅当静态方法 fake 也存在于测试中时才会抛出异常。

我的推测是 StaticMethods fake 也在进行交换。如果是这种情况,我如何伪造静态方法并将实例替换为我的实例伪造?

[Test]
[Isolated]
[Factory("TruckDispatchData")]
public void TruckDispatchTest(
    IEnumerable<DeliveryInfo> deliveryInfo,
    bool expectedResult)
{
    Isolate.Fake.StaticMethods(typeof(Order), Members.MustSpecifyReturnValues);
    var order = Isolate.Fake.Instance<Order>(Members.MustSpecifyReturnValues, ConstructorWillBe.Ignored, BaseConstructorWillBe.Ignored);
    Isolate.Swap.AllInstances<Order>().With(order);

不能肯定,因为没有使用 TypeMock 库,但我认为问题出在您的 Swap 方法中:

Isolate.Swap.AllInstances<Order>()

当您调用 Order class 的所有 实例 时,不涉及 static 方法(因为它们不是 Order 实例方法,它们是 typeof(Order) 实例方法中的 Type),所以,可能 Swap 方法可以以不同的方式使用,像这样:

Isolate.Swap.Static_SOMETHING_HERE.With(order);

我在 Typemock 工作, 刚刚检查了这个问题,我可以确认这是一个错误。 此问题的解决方法非常简单,您只需切换调用顺序即可。例如

var order = Isolate.Fake.Instance<Order>(Members.MustSpecifyReturnValues, ConstructorWillBe.Ignored, BaseConstructorWillBe.Ignored);
Isolate.Swap.AllInstances<Order>().With(order);
Isolate.Fake.StaticMethods(typeof(Order), Members.MustSpecifyReturnValues);

会在以后的版本中修复