如何断言命令不重要的IEnumerable参数?

 谷饶潮流服装HLGC 发布于 2023-01-29 17:32

我正在编写单元测试,我想确保使用一些参数调用特定方法:

var myMock = MockRepository.GenerateMock();

IMyService上有一个带签名的方法

public bool SomeMethod(IEnumerable values)

我有一个消耗我的模拟的业务逻辑层

public class BusinessLogic
{
  protected MyMock MyMock{get;set;}

  public BusinessLogic (myMock)
  {
    this.MyMock = myMock;
  }

  public bool DoLogic()
  {
    var myCollection = // loaded from somewhere
    return this.MyMock(myCollection);
  }
}

我想通过确保它正确调用SomeMethod来测试DoLogic方法.但是我没有控制权(并且真的不希望它超过集合的顺序).

我想声明该方法SomeMethod是使用IEnumerable调用的,{"a", "b", "c"} 但我并不关心顺序.

到目前为止我有

myMock.Expect(x => x.MyMethod(new string[]{"a", "b", "c"});

myMock.AssertWasCalled(x => x.MyMethod(new string[]{"a", "b", "c"});

但如果它被调用,这将失败{"b", "a", "c"}.我不想改变我的业务逻辑以确保参数的排序(因为这将设计围绕测试的BLL).

我怎样才能断言这个方法调用?

1 个回答
  • 你可以使用Arg<T>.Matches:

    myMock.Expect(x => x.MyMethod(Arg<IEnumerable<string>>.Matches(s => !s.Except(expected).Any() && !expected.Except(s).Any()));
    

    2023-01-29 17:34 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有