我正在尝试使用NSubstitute来模拟IConfigurationProvider
。我需要这个方法bool TryGet(string key, out string value)
能够返回不同键的值。因此类似于这样的东西:
var configProvider = Substitute.For<IConfigurationProvider>();
configProvider.TryGet("key1", out Arg.Any<string>()).Returns(x =>
{ x[1] = "42"; return true; });
但是这段代码无法编译。
我需要模拟的方法实际上将输出参数设置为适当的值,无论该参数是什么 - 这是一种依赖性,被测试单元使用自己的参数调用此方法,我只想让它通过填充正确的密钥来“返回”(即通过填充输出参数返回)正确的价值。
这将更好地解释问题:
var value = "";
var configProvider = Substitute.For<IConfigurationProvider>();
configProvider
.TryGet("key1", out value)
.Returns(x => {
x[1] = "42";
return true;
});
var otherValue = "other";
configProvider.TryGet("key1", out value);
configProvider.TryGet("key1", out otherValue);
Assert.AreEqual("42", value); // PASS.
Assert.AreEqual("42", otherValue); // FAIL.
我需要这两个断言都为真,因为这个方法将被测试类使用,而且它可以传递任何输出参数,我只需要用 "42" 填充它。
configProvider.TryGet("key1", out Arg.Any<string>())
不是有效的 C# 语法。您需要为 out 参数使用实际变量。 - Nkosi