Узнав о важности автоматического тестирования в кодовой базе, я в настоящее время пытаюсь добавить модульное тестирование в свою собственную довольно большую кодовую базу C ++.
Кодовая база, над которой я работаю, является общей библиотекой. Я думаю, что понимаю, как справляться с многочисленными системными вызовами, которые мне нужно сделать; скрыть многие из них за интерфейсами и использовать внедрение зависимостей. Проблема в том, что я не хочу, чтобы клиентский код, использующий библиотеку, видел внедрение зависимостей, поскольку это только требование сделать тестируемый модуль кода библиотеки.
Например, возьмите эту строку кода:
TextBox* textBox = new TextBox();
TextBox
Класс содержит код, который выполняет несколько вызовов функций Win32 API, таких как буфер обмена. Если я правильно понимаю, мне нужно сделать это для того, чтобы провести соответствующие юнит-тесты для TextBox
учебный класс:
TextBox* textbox = new TextBox(IClipboardApi* clipboard);
Проблема в том, что если кто-то использует эту библиотеку, я не думаю, что он должен предоставлять настоящий экземпляр буфера обмена. Я мог бы воспользоваться значениями по умолчанию:
TextBox* textbox = new TextBox(IClipobardApi* clipboard = CreateClipboardInstance());
Но я тоже не знаю, правильно ли это делать.
Я все еще очень плохо знаком с модульным тестированием, и большая часть кода моей библиотеки была написана до того, как я узнал о модульном тестировании. Вполне возможно, что этот класс просто не написан хорошо. Если класс написан достаточно хорошо, как я могу скрыть такие детали реализации от клиентов? Если класс не написан правильно, что может быть лучше дизайн?
Задача ещё не решена.
Других решений пока нет …