It would be perfectly logical to write a separate unit test for match,
because it's quite non-trivial.
Il codice che hai mostrato per match
è un banale 1-liner piuttosto semplice, senza casi complicati, o è come un esempio semplificato? Ad ogni modo, presumo sia semplificato ...
Question: what's the point of putting functions and constants into the
anonymous namespace, if it makes them unusable in tests?
Questa domanda è ciò che voleva farmi saltare qui poiché Deduplicator mostrava già un ottimo modo per entrare e ottenere l'accesso attraverso #include
trucco. Ma la formulazione qui fa sembrare che testare ogni singolo dettaglio di implementazione interna di tutto sia una sorta di obiettivo finale universale, quando è lontano da esso.
L'obiettivo del testing di unità pari non è sempre quello di testare ogni piccola microscopia interna di funzionalità. La stessa domanda si applica alle funzioni statiche del file scope in C. Puoi anche rendere più difficile rispondere alla domanda chiedendo perché gli sviluppatori usano pimpls
in C ++ che richiederebbe entrambi friendship
e #include
Inganno alla scatola bianca, scambiando facilmente testabilità dei dettagli di implementazione per tempi di compilazione migliorati, ad esempio
Da una prospettiva pragmatica, potrebbe sembrare lordo ma match
potrebbe non essere correttamente implementato con alcuni casi limite che lo fanno inciampare. Tuttavia, se la sola classe esterna, Foo
, che ha accesso a match
non può usarla in un modo che incontra quei casi limite, allora è piuttosto irrilevante per la correttezza di Foo
che match
ha questi margini casi che non saranno mai riscontrati a meno che Foo
cambi, a quel punto i test di Foo
falliranno e lo sapremo immediatamente.
Una mentalità più ossessiva desiderosa di testare ogni singolo dettaglio di implementazione interna (forse un software mission-critical, ad esempio) potrebbe voler irrompere e festeggiare, ma molte persone non pensano necessariamente che sia la migliore idea, dato che creerebbe le prove più fragili che si possano immaginare. YMMV. Ma volevo solo indirizzare la formulazione di questa domanda che suona come questo tipo di testabilità a livello di dettaglio interno-a grana fine dovrebbe essere un obiettivo finale, quando anche la mentalità di testing unitaria più rigorosa potrebbe rilassarsi un po 'qui ed evitare di radiografare gli interni di ogni classe.
Quindi perché le persone definiscono le funzioni in spazi dei nomi anonimi in C ++ o come funzioni statiche di scope del file con il collegamento interno in C, nascosto al mondo esterno? E questo è principalmente questo: nasconderli al mondo esterno. Ciò ha una serie di effetti dalla riduzione dei tempi di compilazione alla riduzione della complessità (ciò che non può essere consultato altrove non può causare problemi altrove) e così via. Probabilmente la testabilità dei dettagli di implementazione privata / interna non è la cosa numero uno nelle menti delle persone quando lo fanno, ad esempio, riducendo i tempi di costruzione e nascondendo la complessità non necessaria dal mondo esterno.