gpt4 book ai didi

c# - Moq 验证是否以指定的顺序使用不同的参数调用相同的方法

转载 作者:太空狗 更新时间:2023-10-30 01:22:01 29 4
gpt4 key购买 nike

这是我需要进行单元测试的方法:

void Do(IEnumerable<string> items, TextWriter tw){
foreach(var item in items) { tw.WriteLine(item); }
}

如何配置 TextWriter 的模拟以验证某些参数是否按特定顺序传递给相同的方法 (WriteLine)?

[Test]
public void Test(){
var mock = new Mock<TextWriter>();
mock.Setup( ??? ); //check that WriteLine is called 3 times,
//with arguments "aa","bb","cc", in that order.

Do(new[]{"aa", "bb", "cc"}, mock);
mock.Verify();
}

最佳答案

您可以使用回调来验证每次调用传递的参数:

[Test]
public void Test(){
var arguments = new[]{"aa", "bb", "cc"};
var mock = new Mock<TextWriter>();
int index = 0;
mock.Setup(tw => tw.WriteLine(It.IsAny<string>()))
.Callback((string s) => Assert.That(s, Is.EqualTo(arguments[index++])));

Do(arguments, mock.Object);
mock.Verify();
// check all arguments where passed
Assert.That(index, Is.EqualTo(arguments.Length));
}

关于c# - Moq 验证是否以指定的顺序使用不同的参数调用相同的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14751659/

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