Я думаю, что вы сталкиваетесь с общей проблемой с модульным тестированием, в которой правильность действительно определяется тем, работает ли интеграция, так как вам поможет модульный тест?
Основной ответ заключается в том, что модульный тест проверяет, что параметры, которые вы намереваетесь передать инструменту командной строки, фактически передаются таким образом, и что результаты, которые вы ожидаете получить, на самом деле обрабатываются так, как вы собираетесь их обрабатывать. .
Затем существует второй уровень тестов, который может или не может быть автоматизирован (предпочтительно они есть, но это зависит от того, насколько это практично), которые находятся на функциональном уровне, где реальные утилиты называются так, что вы может видеть, что то, что вы намереваетесь пройти, и то, что вы ожидаете получить обратно, соответствует тому, что на самом деле происходит.
Также не было бы ничего плохого в наборе тестов, которые "тестируют" внешние инструменты (которые, возможно, работают по другому расписанию или только при обновлении этих инструментов), которые устанавливают ваши предположения, передавая необработанный ввод и утверждая что вы получите сырой выход. Таким образом, если вы обновите инструмент, вы сможете отследить любые изменения поведения, которые могут повлиять на вас.
Вы должны решить, являются ли эти последние тесты полезными или нет. Это очень сильно зависит от используемых инструментов.