Moq 如何模拟数据以进行模式匹配?

How does Moq mock a data for pattern matching?

背景

public interface IEvent {}

public class Event1 : IEvent {}

public class Event2 : IEvent {} 

现在我有一个业务逻辑可以做到这一点:

switch (evt) {
    case Event1 e1: {
        // do something so I can use e1 directly 
    }
    default: {
        // handle other types of concrete events 
    }
}

在单元测试中,我模拟了一个可观察到的测试来抽取一组具体的事件类型,然后我可以做

testScheduler.AdvanceBy(n) 

我可以测试业务逻辑的每个部分。

但是,现在我必须创建每个事件的具体类型并将它们放入可观察对象中。

我确实必须模拟一些数据实体,因为有些依赖于无法模拟的附加类型,这就是为什么我有这个数据对象的接口。一个例子是,我包装了 BrokeredMessage,这样我就可以从接口调用 CompleteAsync,而不是实际的不可模拟的 BrokeredMessage

如何使用 MOQ 模拟数据对象以便模式匹配起作用?

谢谢

我刚刚遇到了同样的问题,对于我的用例来说,回到老方法而不使用模式匹配没问题。

但是应该可以推出自己的测试替身并通过它们,例如

public class TestEvent1 : Event1 {}

将任何你想覆盖的方法设为虚拟,然后你可以在你的测试代码中伪造它们。

比最小起订量更多的工作,但它允许在不更改 SUT 以匹配测试的情况下测试模式匹配。