Було б цілком логічно написати окремий одиничний тест на відповідність, тому що це зовсім нетривіально.
Код, який ви показали, match- це досить тривіальний 1-вкладиш без будь-яких складних крайових випадків, чи це як спрощений приклад? У будь-якому випадку, я вважаю, що це спрощено ...
Питання: який сенс вводити функції та константи в анонімний простір імен, якщо це робить їх непридатними в тестах?
Це питання саме те, що хотів змусити мене заскочити сюди, оскільки Дедуплікатор вже показав ідеально хороший спосіб прорватися та отримати доступ через #includeхитрість. Але формулювання тут виглядає як тестування кожної внутрішньої деталі впровадження всього - це якась універсальна кінцева мета, коли вона далека від неї.
Мета рівномірного тестування одиниць не завжди є тестуванням кожного маленького зернистого внутрішнього мікро-блоку функціональності. Це ж питання стосується і статичних функцій файлового діапазону в C. На це питання можна навіть важче відповісти, запитуючи, чому розробники використовують pimplsC ++, що вимагатиме як хитрості, такfriendship і #includeхитрості білого поля, торгуючи легкою доказовістю деталей впровадження для покращеного часу компіляції, напр
З певної прагматичної точки зору, це може здатися грубим, але matchможе бути неправильно виконаним у деяких крайніх випадках, які спричиняють його зростання. Однак якщо єдиний зовнішній клас, Fooякий має доступ, matchне може використовувати його таким чином, що стикається з цими крайовими випадками, то це правильне значення для правильності того, Fooщо matchмає ці крайові випадки, які ніколи не будуть зустрічатися, якщо не Fooзміниться, в який момент тести Fooне вдасться, і ми дізнаємось негайно.
Більш нав’язливий склад мислення, який прагне перевірити кожну деталь внутрішнього впровадження (можливо, критично важливе програмне забезпечення, наприклад), може захотіти проникнути в партію, але багато людей не обов'язково вважають, що це найкраща ідея, оскільки це створило б найбільш крихкі тести, які можна уявити. YMMV. Але я просто хотів зайнятись формулюванням цього питання, завдяки чому таке звучання убер-дрібнозернистого-внутрішнього-детального рівня має бути кінцевою метою, коли навіть найсуворіший настрій тестування міркувань може трохи розслабитися тут і уникати рентгенівських зйомок у кожного класу.
То чому люди визначають функції в анонімних просторах імен у C ++ або як статичні функції в області файлів із внутрішнім зв’язком у C, прихованому від зовнішнього світу? І це головним чином: приховати їх від зовнішнього світу. Це має ряд ефектів від скорочення часу компіляції до зменшення складності (те, що не можна отримати в іншому місці, не може спричинити проблем в інших місцях) тощо. Можливо, перевіряється інформація про приватну / внутрішню реалізацію - це не річ номер один у свідомості людей, коли вони це роблять, скажімо, скорочуючи час створення та приховуючи зайву складність від зовнішнього світу.
foo.cpp, а не в заголовку! ОП, здається, добре розуміє, що не слід ставити не заголовки імен у заголовок.