Как проверить метод на службе, при этом издеваясь над другой на той же службе? - PullRequest
1 голос
/ 08 ноября 2011

Скажите, у меня есть услуга:

UserService

И у него есть 2 открытых метода:

Method1, Method2

И я тестирую Method1, но Method1 делает вызов Method2.

Как я могу издеваться (или заглушка - более правильное слово) при вызове Method2.

Если я высмеиваю UserService, что я не могу на самом деле проверить Method1, могу ли я?

Ответы [ 4 ]

3 голосов
/ 08 ноября 2011

Это невозможно сделать, если вы не ослабите связь между этими методами, возможно, введя абстракции / интерфейсы. Ваша текущая реализация UserService подразумевает сильную связь между Method1 и Method2.

2 голосов
/ 08 ноября 2011

Если я правильно понимаю ваш вопрос, вы можете использовать CallBase:

Вызывает реализацию базового класса, если ожидание не переопределяет члена (например, «Частичные насмешки» в насмешках носорога)

Создайте макет с помощью CallBase = true, настройте Method2, чтобы вернуть любое значение, с которым вы хотите проверить, и затем вызовите Method1.

Как пример:

class Program
{
    static void Main(string[] args)
    {
        var mock = new Mock<UserService> { CallBase = true };
        mock.Setup(m => m.Method2()).Returns("Mock 2");

        Console.WriteLine(mock.Object.Method1());
        Console.ReadLine();
    }
}

public class UserService
{
    public virtual string Method1()
    {
        return "Method 1 :: " + Method2();
    }

    public virtual string Method2()
    {
        return "Method 2";
    }
}
0 голосов
/ 08 ноября 2011

Вы не можете с Мок.Вы можете посмотреть на использование родинок, которые дают такую ​​гранулярность.Если вы Mole своей собственной сборки, вы можете издеваться на уровне метода / свойства, а не на уровне класса / интерфейса.

0 голосов
/ 08 ноября 2011

Я все еще бьюсь над вопросом: " Должен ли издеваться над вызовом Method2?"Я склонен сказать «нет»Если класс внутренне использует оба метода как часть своей логики, то оба являются частью теста.Насмешки предназначены для зависимостей от UserService, а не от внутренних деталей реализации.

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

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