Avant de répondre à une telle question, vous devez décider de ce que vous voulez réellement réaliser.
Vous écrivez du code. Vous espérez qu'il remplit son contrat (en d'autres termes, il fait ce qu'il est censé faire. Écrire ce qu'il est censé faire est un grand pas en avant pour certaines personnes).
Pour être raisonnablement convaincu que le code fait ce qu'il est censé faire, soit vous le regardez suffisamment longtemps, soit vous écrivez du code de test qui teste suffisamment de cas pour vous convaincre "si le code passe tous ces tests, alors il est correct".
Souvent, vous n'êtes intéressé que par l'interface définie publiquement d'un code. Si j'utilise votre bibliothèque, je ne me soucie comment vous l' avez fait correctement, seulement qu'il fait correctement. Je vérifie que votre bibliothèque est correcte en effectuant des tests unitaires.
Mais vous créez la bibliothèque. Le faire fonctionner correctement peut être difficile à réaliser. Disons que je me soucie seulement que la bibliothèque fasse correctement l'opération X, j'ai donc un test unitaire pour X. Vous, le développeur responsable de la création de la bibliothèque, implémentez X en combinant les étapes A, B et C, qui sont chacune totalement non triviales. Pour faire fonctionner votre bibliothèque, vous ajoutez des tests pour vérifier que A, B et C fonctionnent correctement. Vous voulez ces tests. Dire "vous ne devriez pas avoir de tests unitaires pour les méthodes privées" est tout à fait inutile. Vous voulez des tests pour ces méthodes privées. Peut-être que quelqu'un vous dit que les tests unitaires de méthodes privées sont faux. Mais cela signifie seulement que vous pourriez ne pas les appeler des "tests unitaires" mais des "tests privés" ou tout ce que vous voulez les appeler.
Le langage Swift résout le problème que vous ne voulez pas exposer A, B, C en tant que méthodes publiques juste parce que vous voulez le tester en donnant aux fonctions un attribut "testable". Le compilateur permet d'appeler des méthodes testables privées à partir de tests unitaires, mais pas à partir de code non test.