gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:56:59 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com