具体方法的部分模拟 class

partial mocking of methods of concrete class

  BTPhysicalAccount testerInstance = new BTPhysicalAccount(IvirtualAccounts, BTmarketIn, int);

我想测试这个class的一个方法。 BTmarketIn 是一个具体的 class 并且这个 class 中的一个方法被用于该被测方法。所以我需要模拟那个方法因此我试过这个:

        var readerAsk = Substitute.ForPartsOf<BTMarketInfo>();
        readerAsk.When(x => x.GetAskPrice(Arg.Any<SymbolType>())).DoNotCallBase();
        readerAsk.GetAskPrice(Arg.Any<SymbolType>()).Returns(2000);
        readerAsk.When(x => x.GetBidPrice(Arg.Any<SymbolType>())).DoNotCallBase();
        readerAsk.GetBidPrice(Arg.Any<SymbolType>()).Returns(2000);

它一直抛出空异常错误,经过一些研究我意识到你不能模拟非虚拟方法。 所以我确实有那个 BTMarketIn class IMarketInfo 的接口 class。现在我可以模拟这个接口的一个实例,但我需要一个 BTMarketIn 实例作为构造函数参数传递。我该如何解决这个问题?

Microsoft Fakes Shims 应该适用于此:https://msdn.microsoft.com/en-us/library/hh549175.aspx#shims