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