Как тестировать private и protected методы, может есть какие-то стандартные средства, позволяющие сделать это? В интернете видел примеры, что подобные методы вызываются через рефлексию, или у них тупо меняют модификатор доступа на public на время теста.
Ответ У класса есть интерфейс - это совокупность его открытых методов. Тем самым он подобен черному ящику - вы что-то даете на вход, внутри ящика(класса) происходят некие таинственные процессы, а затем он выдает вам результат этих загадочных процессов. Поэтому любому пользователю класса важно чтобы должным образом работал именно этот интерфейс, и неважно, за счет чего он работает - за счет хитрых колдунств, безупречной логики или чего-то еще. О наличии приватных методов он ничего не знает и знать не должен. Соответственно, тестирование имеет смысл только для публичных методов. Если они работают должным образом, то и класс работает должным образом. А его внутренности - это его личное дело.