繁体   English   中英

如何模拟NSubstitute中返回对象的索引器信息

[英]How to mock indexer information for the returned object in NSubstitute

我想模拟对象返回的索引器属性。 我正在使用NSubstitute进行嘲笑。 我有以下情况。 在示例中,我想在从IFeedData.GetFeedData返回时模拟索引器属性this [string symbolName]

public class FeedEntity
{
    private SymbolData _symbolData;
    public string Symbol { get; set; }

    public SymbolData this[string symbolName]
    {
        get //Search Data into Actual Feed and returns relevent data for Symbol
        {
            if (_symbolData != null)
            {
                _symbolData = new SymbolData//Just Created For Sample Purpose
                {
                    TraderName = "TestTrader",
                    BrokerName = "TestBroker"
                };
            }
            return _symbolData;
        }

        set
        {
            _symbolData = value;
        }
    }
}

public class SymbolData
{
    public string TraderName { get; set; }
    public string BrokerName { get; set; }
}

public interface IFeedData
{
    FeedEntity GetFeedData(string symbolName);
}

public class FeedClass : IFeedData
{
    public FeedEntity GetFeedData(string symbolName)
    {
        return new FeedEntity
        {
            Symbol = "TestSymbol"
        };
    }
}

引用IFeedData的主类-

public class FeedProcesser
{
        private IFeedData _feedService = new FeedClass();

        public FeedProcesser(IFeedData feedService)
        {
            _feedService = feedService;
        }

        public void ProcessFeedData(string symbol)
        {
           var feedRespnse= _feedService.GetFeedData(symbol);
           //do feed processing logic based on Trader and Broker Information
        }
}

单元测试类别为-

[TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            var iFeedData = Substitute.For<FeedClass>();
            iFeedData.GetFeedData(Arg.Any<string>()).Returns(x => new FeedEntity() { Symbol = "HHH" });
            var processer = new FeedProcesser(iFeedData);
            processer.ProcessFeedData("HHH");

        }
    }

任何帮助表示赞赏!

为了模拟FeedEntity我们需要将其所有成员virtual或提取一个接口。 然后,我们可以像这样模拟索引器:

var feedEntity = Substitute.For<IFeedEntity>();
feedEntity["ABC"] = new SymbolData(...);
// or if it is a get-only indexer:
feedEntity["ABC"].Returns(new SymbolData(...));

如果您只是想测试FeedProcessor我们可能无需赘述。 相反,我们可以代替IFeedData

[Test]
public void TestProcessing() {
    var feedData = Substitute.For<IFeedData>();
    feedData.GetFeedData("HHH").Returns(new FeedEntity(...)); 
    // Configure substitute to return a real FeedEntity. 
    // Alternatively, return a substitute IFeedEntity as described above
    var subject = new FeedProcessor(feedData);

    subject.ProcessFeedData();

    // assert correct processing  
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM