Я всегда придерживаюсь этого подхода: Я хочу протестировать публичный API, предоставляемый моим классом.
Если у вас есть закрытые методы, вы вызываете их только из открытых методов, которые вы предоставляете другим классам. Следовательно, если вы проверяете, что эти публичные методы работают должным образом при любых условиях, вы также доказали, что частные методы, которые они используют, также работают.
Я признаю, что сталкивался с некоторыми особенно сложными частными методами. В этом крайнем случае, если вы хотите проверить их, вы можете сделать это:
@obj.send(:private_method)