c# - 如何断言顺序不重要的 IEnumerable 参数?

标签 c# unit-testing rhino-mocks

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

var myMock = MockRepository.GenerateMock<IMyService>();

IMyService 有一个带有签名的方法

public bool SomeMethod(IEnumerable<string> 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)。

如何断言此方法调用?

最佳答案

您可以使用 Arg<T>.Matches :

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

关于c# - 如何断言顺序不重要的 IEnumerable 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21526521/

相关文章:

c# - 如何使用自定义委托(delegate)对没有参数的方法进行 stub ?

c# - stub 或模拟 ASP.NET Web API HttpClient

c# - 在 wpf 应用程序中更改组合框项目背景颜色

c# - 字符串数组初始化

c# - 如何强制为空值调用 JsonConverter.WriteJson()

Android ActivityMonitor 失败导致 getActivity() 永远不会返回

php - 如何对继承对象进行单元测试?

c# - 尾部。 ILAsm中的前缀–使用示例吗?

unit-testing - 使用 Controller 的 Grails Spock 单元测试断言 View

c# - 如何模拟 WCF 服务?