.NET und C# ohne Web?
Они должны быть простыми,
Нет. Они могут быть реально сложнее чем сам код. Просто это не продуктивный код. Если там что то неправильно это плохо, но не критично.
Не кажется, что тут лишнее звено?
Нет. Ввод непродуктивного проверяющего кода не гарантирует отсутствие ошибок. Но снижает их и снижает очень ощутимо. Просто надо понимать цели иправильно использовать. И помнить, что продуктивный код работает и с юниттестами и без них. И юниттесты нужны в первую очередь не для поиска ошибок, а для проверки кода на критерии. Если юниттест обвалился, то проишодит это всегда в среде разработки и тестирования и никогда в продуктивной среде. То есть есть возможность руками залезть и разобраться, кто виноват.
Проблема юнит тестов в том, что либо их мало и они тестируют всякую мелочную чушь, которая и так очевидна, либо их должно быть настолько много, чтобы они всё покрывали, но тогда разработка усложняется раза в два.
Это уже философия. Проблема в том, что программисты либо неопытные либо дорогие. Что начальство тупое либо это не наше начальство. либо-либo