Я использую Moq для тестирования С#. По какой-то причине я получаю нуль обратно вместо строки. Я пытаюсь проверить
public void Foo(IData data){
_value = data.GetValue<T>(someString);
}
interface IData
{
T GetValue<T>(string someString);
}
и в моем тестовом коде у меня есть
Mock<IData> dataMock = new Mock<IData>();
dataMock.Setup(x => x.GetValue<string>(It.IsAny<string>())).Returns("blah");
Foo(dataMock.Object);
Но когда я _value
, _value
получает значение null. Разве это не должно быть назначено "blah"
?
Скорее всего, общий параметр T
в вашем вызове GetValue
не является string
, поэтому условие настройки не соответствует. По умолчанию Moq вернет значения по умолчанию (null
в этом случае) из вызовов методов, которые не были явно установлены, если вы не скажете, что это "строгое".
// tell Moq to throw an exception if someone calls a method that you haven't 'Setup'
Mock<IData> dataMock = new Mock<IData>(MockBehavior.Strict);
It.IsAny<string>
соответствует отлично, но перед ним <string>
должен был быть <object>
. Обнови свой ответ и я его приму.
<T>
в вашем тесте?