Метод Moqed, возвращающий ноль вместо строки

1

Я использую 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"?

  • 4
    Можете ли вы поделиться своим настоящим тестом? Что такое <T> в вашем тесте?
  • 0
    поделиться еще кодом
Теги:
unit-testing
mocking
moq

1 ответ

1
Лучший ответ

Скорее всего, общий параметр 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); 
  • 0
    Ты более или менее прав. T не был объектом, но параметр был строкой. Итак, It.IsAny<string> соответствует отлично, но перед ним <string> должен был быть <object> . Обнови свой ответ и я его приму.
  • 0
    @ Dgrin91: я обновил его. Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню