首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用IEnumerable在NSubstitue中建立增强匹配器

用IEnumerable在NSubstitue中建立增强匹配器
EN

Stack Overflow用户
提问于 2017-03-02 18:54:18
回答 1查看 1.7K关注 0票数 2

我正在为一个项目做一个单元测试,我不知道如何让NSubstitute按照我所期望的方式工作。我所面临的问题是,我要替换的代码在while循环中,并且取决于从替换值返回的内容,决定循环是否继续。

我想要做的是让Process()根据传入的内容返回一个不同的结果。我试过了

代码语言:javascript
复制
api.Process(Arg.Is<IEnumerable<int>>(new[] {1,2,3}, Arg.Any<bool>()).Returns(new ProcessingResult(){Success = true, IdsNotProcessed = List<int>{30}});

但是它似乎不起作用,因为processingResult返回null,因为NSubstitue与参数不匹配。

代码语言:javascript
复制
    [Test]
    public void TestTwoLoops()
    {
        var api = Substitute.For<IApi>();
        api.Process(/*list containing 1,2,3*/, Arg.Any<bool>()).Returns(new ProcessingResult(){Success = true, IdsNotProcessed = List<int>{30}});
        api.Process(/*list containing 30*/, Arg.Any<bool>()).Returns(new List<int>{});

        var sut = new WidgetMaker(api);

        sut.MakeWidget();
    }

    public class WidgetMaker
    {
        public WidgetMaker(IApi api)
        {
            _api = api;
        }

        public void MakeWidgets(IEnumerable<int> widgetIds)
        {
            var idsToProcess = widgetIds.ToList();

            while(true)
            {
                if(!idsToProcess.Any())
                {
                    berak;
                }

                var processingResult = _api.Process(idsToProcess, false);

                if(processingResult.Success)
                {
                    idsToProcess.Clear();
                    idsToProcess.AddRange(processingResult.IdsNotProcessed);
                }
                else
                {
                    break;
                }
            }
        }

        private IApi _api;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-02 18:54:18

当我写这个问题的时候,我得到了答案,但我觉得其他人可能会觉得这很有帮助。

使用接受谓词的重载,并使用参数为new[] {/values的new[]方法,我希望输入/}

代码语言:javascript
复制
api.Process(Arg.Is<IEnumerable<int>>(x => x.SequenceEqual(new[] {1,2,3}, Arg.Any<bool>())).Returns(new ProcessingResult(){Success = true, IdsNotProcessed = List<int>{30}});
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42563640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档