Чтение страницы MSDN на Type.GetGenericArguments () , кажется, что метод когда-либо будет возвращать пустой массив только тогда, когда представленный тип не является универсальным типом. Поскольку вы знаете , что представленный здесь тип является универсальным типом (а именно, List или List <>), метод всегда будет возвращать либо T, либо объект типа, представляющий универсальный параметр, имеющий значение true для свойства IsGenericParameter.
В своем текущем состоянии массив generic_types никогда не должен быть пустым. Я бы сказал, нет, вам не нужно проверять его, независимо от того, говорите ли вы о модульном тесте или простом защитном заявлении, как в приведенном выше коде. Он не подходит для модульного теста, потому что сводится к одной из двух ситуаций: либо вы в конечном итоге тестируете фреймворк (который, как мы должны предполагать, уже тестировали Microsoft), либо вы заканчиваете тестированием внутренних деталей реализации вашего модульного теста , который является тестовым анти-паттерном. Для защитного заявления, вы просто не должны проверять ситуации, которые должны быть невозможны, если непосредственный код написан правильно. Подобные проверки во время выполнения должны быть зарезервированы для вещей, которые могут происходить во время выполнения в зависимости от среды, даже если непосредственный код верен.