Как бы я сделал TDD с объектом COM OLE - PullRequest
2 голосов
/ 03 ноября 2008

У меня есть объект OLE COM, для которого я пытаюсь написать оболочку, я решил начать использовать TDD для написания кода для него, так как считаю, что это даст мне лучшее представление о том, что я пробую написать. COM-объект имеет такой интерфейс:

Interface Mapinfo
    Sub [Do](ByVal cmd As String)
    Function Eval(ByVal cmd As String) As String
End Interface

Команда [Do] будет выглядеть примерно так:

Mapinfo.Do("OpenTable("""C:\Temp\MyTable.TAB""")")

Теперь я пытаюсь написать оболочку, поэтому есть такая функция:

Mapinfo.OpenTable("C:\Temp\MyTable.TAB")

Теперь моя основная проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я хочу написать новый тест и какой-то код, мне нужно создать экземпляр объекта OLE, подождать, пока приложение запустится (30 секунд +), test Моя маленькая функция, закройте и утилизируйте объект OLE, измените код и снова запустите его.

Мой вопрос: есть ли лучший способ сделать все это без необходимости каждый раз запускать приложение OLE? Я слышал о фальшивых предметах, но не особо разбирался в них, помогут ли они мне здесь? Если да, то как?

РЕДАКТИРОВАТЬ: Теперь я понял, что мне придется сделать фиктивный объект для Mapinfo, мой вопрос: как мне сделать макет объекта, который может принимать различные форматированные строки? Как это поможет мне проверить правильность кода в моей оболочке?

1 Ответ

3 голосов
/ 03 ноября 2008

Да, фиктивные объекты помогут. По сути, вы создаете поддельный объект Mapinfo, издеваясь над интерфейсом Mapinfo (вам следует переименовать его в IMapInfo, кстати).

Затем вы даете указание тому, что имитировать, какие вызовы ожидать и какие результаты возвращать (при необходимости). Вы также можете создавать тесты, в которых макет генерирует исключения или выполняет другие вещи, которые трудно вызвать с использованием реального объекта.

Две большие (и бесплатные) платформы для .NET-моделирования: MoQ и Rhino Mocks . Rhino более зрелый и имеет больше способов настройки макетов. MoQ является новичком и обладает меньшим набором функций и меньшим количеством способов определения ожиданий, чем Rhino.

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

...