2009-06-02 3 views
5

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

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

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

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

ответ

3

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

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

+0

Я использую Moq, но не уверен, как бы издеваться над этим. Как вы это сделаете в TypeMock? – Schotime

+0

TypeMock уникален тем, что он модифицирует IL, что позволяет ему высмеивать объекты, которые вы иначе не могли бы высмеять. Я бы по-прежнему рекомендовал инъекционный подход, но если это невозможно, вы можете посмотреть на TypeMock. –

0

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

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

+0

Начинает новый «Процесс». – Schotime

+0

Я имею в виду, что делает ваш подпроцесс? Есть ли способ проверить, что ваш подпроцесс делает то, что он должен? –

+0

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

0

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

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