无法在类型上多次调用Swap.AllInstances()

时间:2015-03-18 07:57:32

标签: c# unit-testing typemock typemock-isolator

我有一个测试用例存在标题中引发异常的问题。

只有当静态方法假在测试中也存在时才抛出异常。

我的假设是StaticMethods假冒也在进行交换。如果是这种情况,我怎么能伪造静态方法并用我的实例伪替换实例?

[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);

2 个答案:

答案 0 :(得分:2)

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

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);

将在未来版本中修复。

答案 1 :(得分:0)

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

Isolate.Swap.AllInstances<Order>()

当您调用Order类的所有实例时,不会涉及静态方法(因为它们不是Order实例方法,它们是Type实例方法的typeof(Order),因此,可能是Swap方法可以以某种不同的方式使用,如下所示:

Isolate.Swap.Static_SOMETHING_HERE.With(order);