Макет возврата метода на основе параметра объекта - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть следующий (упрощенный) код:

public string methodName(ClassType object)
{
    If(object.value == 1)
        return "Yes";
    else If(object.value == 2)
        return "No";
    else
        return "whatever";
}

Затем я вызываю этот метод в модульном тесте, и мне нужно смоделировать возвращаемый тип на основе значения объекта:

_Service.Setup(x => x.methodName(new methodName { value = 1}).Returns("Yes");
_Service.Setup(x => x.methodName(new methodName { value = 2}).Returns("No");

Я знаю, что я написал неправильно, но как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Вы на правильном пути.С Moq, вы должны точно указать, какая настройка должна соответствовать каждому входу.Вы делаете это так:

_Service.Setup(x => x.methodName(It.IsAny<ClassType>())).Returns("whatever");
_Service.Setup(x => x.methodName(It.Is<ClassType>(o => o.value == 1))).Returns("Yes");
_Service.Setup(x => x.methodName(It.Is<ClassType>(o => o.value == 2))).Returns("No");

В первой строке указывается, что макет будет возвращать «что угодно» всякий раз, когда этот метод вызывается с любым значением.Следующие две строки переопределяют это поведение для определенных значений.

Я бы ознакомился с руководством по Moq Quickstart для получения более подробной информации, в частности с разделом Соответствующие аргументы .

0 голосов
/ 26 сентября 2018

Я не так хорошо знаком с Moq, однако полагаю, что следующее должно сделать это.Вы должны предоставить один Returns для каждого возможного значения для вашего параметра:

_Service.Setup(x => x.methodName(It.Is<ClassType>(y => y.value == 1))).Returns("Yes");
_Service.Setup(x => x.methodName(It.Is<ClassType>(y => y.value == 2))).Returns("No");

Таким образом, всякий раз, когда ваш methodName -метод вызывается с object.value == 1, "Yes" возвращается, а object.value == 2 разрешает метод, возвращающий "No".

Однако для меня это не имеет большого смысла, поскольку вы издеваетесь над поведением methodName с точно таким же поведением.Я полагаю, это только для исследований.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...