У меня есть интерфейс, который содержит метод следующую подпись:Дразнящий из выражения с NSubstitute
TResult GetValue<T, TResult>(object key, Expression<Func<T, TResult>> property) where T : class;
Используя Moq, я могу издеваться конкретный вызов этого метода, как это:
var repo = new Mock<IRepository>();
repo.Setup(r => r.GetValue<Customer, string>("SomeCustomerId", c => c.SecretAgentId)).Returns("SecretAgentId");
Тогда, когда я делаю этот вызов
repo.Object.GetValue<Customer, string>("SomeCustomerId", c => c.SecretAgentId);
Tt возвращает "SecretAgentId"
, как я ожидал, так что все выглядит нормально.
Моя проблема заключается в том, что в нашем реальном коде производства мы используем NSubstitute, а не Moq. Я попытался, используя тот же тип установки здесь:
var repo = Substitute.For<ICrmRepository>();
repo.GetValue<Customer, string>("SomeCustomerId", c => c.SecretAgentId).Returns("SecretAgentId");
Однако, когда я делаю следующий вызов здесь
repo.GetValue<Customer, string>("SomeCustomerId", c => c.SecretAgentId);
возвращает «» вместо "SecretAgentId"
Я попытался заменяющего c => c.SecretAgentId
с Arg.Any<Expression<Func<Customer, string>>>()
просто чтобы увидеть, работает ли он тогда, а затем возвращает "SecretAgentId"
, как и ожидалось. Но мне нужно проверить, что он вызывается с правильным выражением, а не только с любым выражением.
Так что мне нужно знать, можно ли заставить это работать в NSubstitute, и если да, то как?