我正在编写单元测试,我想确保使用一些参数调用特定方法:
var myMock = MockRepository.GenerateMock();
IMyService上有一个带签名的方法
public bool SomeMethod(IEnumerablevalues)
我有一个消耗我的模拟的业务逻辑层
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()));