Rhino Mocks проверяет, что закрытый метод вызывается из открытого метода - PullRequest
1 голос
/ 17 июня 2010

Я пытался выяснить это, как я могу проверить, что в классе, который я тестирую, вызывается приватный метод с moh-носителями? Так что мой класс будет примерно таким.

Public class Foo
{
    public bool DoSomething()
    {
       if(somevalue)
       {
          //DoSomething;
       }
       else
       {
          ReportFailure("Failure");
       }
    }

    private void ReportFailure(string message)
    {
        //DoSomeStuff;
    }
}

Итак, мой модульный тест выполняется для класса Foo и метода DoSomething (). Я хочу проверить и убедиться, что определенное сообщение передается в ReportFailure, если somevalue равно false, с использованием насмешек rhino.

Ответы [ 2 ]

2 голосов
/ 17 июня 2010

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

Если вы тестируете выполнение частного метода, вы, скорее всего, слишком углубляетесь в реализацию данного класса, и вам трудно изменить свою реализацию в будущем, не нарушая тесты.

0 голосов
/ 24 июня 2010

Я согласен с ответом mjd79, однако, если вы женаты на идее проверки вызова ReportFailure, вы можете изменить уровень защиты метода на Internal и установить атрибут InternalsVisibleTo в вашей сборке так, что он позволяет вашим юнит-тестам получить к нему доступ.

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

...