Проблема здесь в том, что искаженный внешний ввод привел к сбою вашей программы. Решение состоит в том, чтобы полностью протестировать возможные входные сценарии на границах вашего кода. Вы говорите, что ваши юнит-тесты «обширные», но вы явно не проверяли эту возможность. Покрытие кода является полезным инструментом, но важно помнить, что код покрытия не - это то же самое, что тщательное его тестирование. Тщательное тестирование представляет собой комбинацию покрывающих сценариев использования и строк кода.
Методология, которую я использую, заключается в том, чтобы доверять внутренним абонентам, но никогда не доверять внешним абонентам или вводу. Поэтому я явно не проверяю блок для пустого списка в любом коде, кроме первой функции, которая получает внешний вход. Но эта входная функция должна быть исчерпывающе покрыта.
В этом случае я думаю, что исключение библиотеки - разумное поведение - нет смысла просить min
пустого списка. Библиотека не может законно установить для вас значение, например 0, так как вы можете иметь дело, например, с отрицательными числами.
Я думаю, что пустой список никогда не должен был достигать кода, который запрашивает min
- он должен был быть идентифицирован при вводе и либо вызывать там исключение, либо устанавливать его в 0, если это работает для вас, или как иначе это работает для вас.