здесь некоторые даже не рекомендуют тестировать private методы
1.2 скорее всего надо разбивать на функции или вроде того; я изолированно не тестировал, может потому, что с тестами ещё не освоился; по идее тесты должны повышать качество кода, но для изоляции приходится всякие mock объекты использовать
2 я понимаю singleton, просто как способ сгруппировать глобальные переменные, функции
2.2 какое применение этих Exception-ов?