Скрытие внедрения зависимостей во время модульного тестирования общей библиотеки

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

Кодовая база, над которой я работаю, является общей библиотекой. Я думаю, что понимаю, как справляться с многочисленными системными вызовами, которые мне нужно сделать; скрыть многие из них за интерфейсами и использовать внедрение зависимостей. Проблема в том, что я не хочу, чтобы клиентский код, использующий библиотеку, видел внедрение зависимостей, поскольку это только требование сделать тестируемый модуль кода библиотеки.

Например, возьмите эту строку кода:

TextBox* textBox = new TextBox();

TextBox Класс содержит код, который выполняет несколько вызовов функций Win32 API, таких как буфер обмена. Если я правильно понимаю, мне нужно сделать это для того, чтобы провести соответствующие юнит-тесты для TextBox учебный класс:

TextBox* textbox = new TextBox(IClipboardApi* clipboard);

Проблема в том, что если кто-то использует эту библиотеку, я не думаю, что он должен предоставлять настоящий экземпляр буфера обмена. Я мог бы воспользоваться значениями по умолчанию:

TextBox* textbox = new TextBox(IClipobardApi* clipboard = CreateClipboardInstance());

Но я тоже не знаю, правильно ли это делать.

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

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]