我正在编写单元测试,我想确保使用某些参数调用特定方法:
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/