Как мне выполнить модульный тестовый код, который создает новый процесс? - PullRequest
5 голосов
/ 02 июня 2009

Как я могу проверить следующий метод?

Это метод реализации конкретного класса интерфейса.

Я обернул класс Process интерфейсом, который предоставляет только те методы и свойства, которые мне нужны. Класс ProcessWrapper является конкретной реализацией этого интерфейса.

    public void Initiate(IEnumerable<Cow> cows)
    {
        foreach (Cow c in cows)
        {
            c.Process = new ProcessWrapper(c);
            c.Process.Start();
            count++;
        }
    }

Ответы [ 3 ]

3 голосов
/ 02 июня 2009

Есть два способа обойти это. Первый - использовать внедрение зависимостей. Вы можете ввести фабрику и заставить метод Initiate вызвать метод create, чтобы получить тип ProcessWrapper, необходимый для вашего теста.

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

0 голосов
/ 02 июня 2009

Я не знаком с C # (я предпочитаю свой без хэша), но вам нужен какой-то интерфейс к процессу (IPC или любой другой, наиболее удобный метод), чтобы вы могли отправлять ему тестовые запросы и получать результаты обратно , На самом простом уровне вы бы просто отправили сообщение процессу и получили результат. Или вы могли бы иметь больше детализации и отправлять более конкретные команды из вашего тестового жгута. Это зависит от того, как вы настроили свою среду модульного тестирования, точнее от того, как вы отправляете команды тестирования, как вы их получаете и как вы сообщаете результаты.

Лично у меня был бы тестовый объект внутри процесса, который просто получает, запускает и сообщает результаты модульного теста и имеет тестовый код внутри этого объекта.

0 голосов
/ 02 июня 2009

Что делает ваш процесс? Есть ли способ проверить, что он делает то, что должен делать? Например, он может записывать в файл или таблицу базы данных. Или же он может предоставить API (IPC, веб-сервис и т. Д.), Который можно попробовать вызвать с тестовыми данными.

С точки зрения TDD, возможно, имеет смысл подключить «процесс макета / теста», который выполняет некоторые действия, которые вы можете легко проверить. (Это может потребовать изменения кода, чтобы позволить вашему тестовому коду что-то внедрить.) Таким образом, вы только тестируете свой код вызова и не обязательно тестируете фактический бизнес-процесс. После этого вы можете провести различные модульные тесты для проверки вашего бизнес-процесса.

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