Sangat logis untuk menulis unit test terpisah untuk pertandingan, karena itu cukup non-sepele.
Kode yang Anda tunjukkan match
adalah 1-liner yang sangat sepele tanpa case edge yang rumit, atau apakah itu seperti contoh sederhana? Bagaimanapun, saya akan menganggap itu disederhanakan ...
Pertanyaan: apa gunanya menempatkan fungsi dan konstanta ke dalam namespace anonim, jika itu membuat mereka tidak dapat digunakan dalam pengujian?
Pertanyaan ini yang ingin membuat saya melompat ke sini karena Deduplicator sudah menunjukkan cara yang sangat baik untuk masuk dan mendapatkan akses melalui #include
tipu daya. Tetapi kata-kata di sini membuatnya seperti menguji setiap detail implementasi internal tunggal dari segala sesuatu adalah semacam tujuan akhir universal, ketika itu jauh dari itu.
Tujuan pengujian satuan sekalipun tidak selalu menguji setiap unit mikro internal granular kecil fungsionalitas. Pertanyaan yang sama berlaku untuk fungsi ruang lingkup file statis di C. Anda bahkan dapat membuat pertanyaan lebih sulit untuk dijawab dengan menanyakan mengapa pengembang menggunakan pimpls
C ++ yang membutuhkan keduanya friendship
dan #include
tipu daya ke kotak putih, memperdagangkan testabilitas yang mudah dari detail implementasi untuk meningkatkan waktu kompilasi, misalnya
Dari semacam perspektif pragmatis, mungkin terdengar kotor tetapi match
mungkin tidak diimplementasikan dengan benar dengan beberapa kasus tepi yang menyebabkannya naik. Namun, jika satu-satunya kelas luar Foo
,, yang memiliki akses ke match
tidak mungkin menggunakannya dengan cara yang bertemu dengan kasus tepi tersebut, maka itu agak tidak relevan dengan kebenaran Foo
yang match
memiliki kasus tepi ini yang tidak akan pernah ditemukan kecuali Foo
perubahan, pada titik mana tes Foo
akan gagal dan kami akan segera tahu.
Pola pikir yang lebih obsesif ingin menguji setiap detail implementasi internal (mungkin perangkat lunak mission-critical, misalnya) mungkin ingin masuk dan berpesta, tetapi banyak orang tidak selalu berpikir itu adalah ide terbaik, karena akan menciptakan kebanyakan tes rapuh bisa dibayangkan. YMMV. Tetapi saya hanya ingin membahas kata-kata dari pertanyaan ini yang membuatnya terdengar seperti jenis testabilitas level-uber-fine-grained-internal-detail-harus menjadi tujuan akhir, ketika bahkan pola pikir unit testing yang paling keras mungkin sedikit santai di sini dan menghindari x-raying internal setiap kelas.
Jadi mengapa orang mendefinisikan fungsi dalam ruang nama anonim di C ++ atau sebagai fungsi statis ruang-file dengan tautan internal di C, disembunyikan dari dunia luar? Dan terutama itu: untuk menyembunyikan mereka dari dunia luar. Itu memiliki sejumlah efek dari mengurangi waktu kompilasi hingga mengurangi kompleksitas (apa yang tidak dapat diakses di tempat lain tidak dapat menyebabkan masalah di tempat lain) dan sebagainya. Mungkin testability dari detail implementasi pribadi / internal bukanlah hal utama dalam pikiran orang ketika mereka melakukannya, katakanlah, mengurangi waktu pembangunan dan menyembunyikan kompleksitas yang tidak perlu dari dunia luar.
foo.cpp
, bukan header! OP tampaknya mengerti dengan baik bahwa Anda seharusnya tidak meletakkan spasi nama tunggal di header.