Модульное тестирование с использованием кода, зависящего от сети

StackOverflow https://stackoverflow.com/questions/44338

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

Если у вас есть класс, который "выходит и получает объект Win32_LogicalDisk для сервера" И делает что-то еще (каким-то образом использует объект 'Win32_LogicalDisk'), предполагая, что вы хотите протестировать части класса, которые используют этот объект, вы можете использовать Внедрение зависимостей чтобы позволить вам издеваться над объектом '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'.

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top