Я пытаюсь издеваться IConfigurationProvider
с NSubstitute. Мне нужен метод 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; });
но это не компилируется.
Мне нужен метод mocked, чтобы фактически установить для параметра out соответствующее значение, независимо от того, что это за параметр - это зависимость, тестируемый модуль вызывает этот метод со своими собственными параметрами, и я просто хочу, чтобы он «возвратился» (как в возврат, заполнив параметр out) правильные значения для ключей.
Это должно дать более широкий взгляд на проблему:
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".