Модульное тестирование с использованием сетевого кода - PullRequest
9 голосов
/ 04 сентября 2008

Я пытаюсь быть лучше в модульном тестировании своего кода, но сейчас я пишу много кода, который имеет дело с удаленными системами. SNMP, WMI, такие вещи. В большинстве классов я могу смоделировать объекты для их тестирования, но как вы справляетесь с модульным тестированием реальной системы? Например, если мой класс выходит и получает объект Win32_LogicalDisk для сервера, как я мог бы выполнить его модульное тестирование?

Ответы [ 3 ]

5 голосов
/ 04 сентября 2008

Предполагая, что вы имели в виду "Как я могу проверить вещи, которые трудно / невозможно подделать":

Если у вас есть класс, который «выходит и получает объект Win32_LogicalDisk для сервера» И делает что-то еще (каким-то образом использует объект «Win32_LogicalDisk»), предполагая, что вы хотите протестировать части класса, которые используют объект, вы можете использовать Dependency Injection , чтобы позволить вам смоделировать объект 'Win32_LogicalDisk'. Например:

class LogicalDiskConsumer(object):

    def __init__(self, arg1, arg2, LogicalDiskFactory)
        self.arg1=arg1
        self.arg2=arg2
        self.LogicalDisk=LogicalDiskFactory()

    def consumedisk(self):
        self.LogicalDisk.someaction()

Затем в коде вашего модульного теста передайте LogicalDiskFactory, который возвращает фиктивный объект для Win32_LogicalDisk.

2 голосов
/ 04 ноября 2008

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

1 голос
/ 02 ноября 2008

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

В качестве примера, недавно мне нужно было разработать код для запуска внутри стороннего продукта. Задача состояла в том, чтобы наш «партнер» занимался компиляцией и интеграцией с их базовым кодом: мне не разрешали просматривать их код в любой форме! Моя стратегия состояла в том, чтобы создать очень простой эмулятор, который делал бы то, что я думал их код, на основе информации от их инженеров. Мы использовали язык, который облегчал переключение различных частей эмулятора в каждую сборку и из нее, поэтому я мог провести огромное количество тестов, прежде чем привлекать нашего партнера для создания каждой новой итерации.

Я бы снова использовал тот же метод, поскольку проблем с программным обеспечением в этом конкретном продукте примерно на порядок меньше, чем в нашем следующем наиболее надежном продукте!

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