ааа! конструкции надо строить тестируемые. построение кода, поддерживающего тесты, сильно влияет на то, как такой код будет проектироваться и писаться. это конечно получается неприятно, что тесты диктуют путь написания код, но... Untested code is broken code.