Jika saya harus menebak maksud pertanyaan Anda, saya akan mengatakan:
- Anda ingin pemeriksaan yang wajar untuk konstruktor pribadi yang melakukan pekerjaan aktual, dan
- Anda ingin semanggi mengecualikan konstruktor kosong untuk kelas util.
Untuk 1, jelas Anda ingin semua inisialisasi dilakukan melalui metode pabrik. Dalam kasus seperti itu, pengujian Anda harus dapat menguji efek samping konstruktor. Ini harus termasuk dalam kategori pengujian metode privat normal. Buat metode menjadi lebih kecil sehingga mereka hanya melakukan sejumlah hal yang menentukan (idealnya, hanya satu hal dan satu hal dengan baik) dan kemudian uji metode yang mengandalkannya.
Misalnya, jika konstruktor [pribadi] saya menyiapkan bidang instance kelas saya a
ke 5
. Lalu saya bisa (atau lebih tepatnya harus) mengujinya:
@Test
public void testInit() {
MyClass myObj = MyClass.newInstance(); //Or whatever factory method you put
Assert.assertEquals(5, myObj.getA()); //Or if getA() is private then test some other property/method that relies on a being 5
}
Untuk 2, Anda dapat mengonfigurasi clover untuk mengecualikan konstruktor Util jika Anda memiliki pola penamaan yang ditetapkan untuk kelas Util. Misalnya, dalam proyek saya sendiri, saya menggunakan sesuatu seperti ini (karena kami mengikuti konvensi bahwa nama untuk semua kelas Util harus diakhiri dengan Util):
<clover-setup initString="${build.dir}/clovercoverage.db" enabled="${with.clover}">
<methodContext name="prvtCtor" regexp="^private *[a-zA-Z0-9_$]+Util *( *) *"/>
</clover-setup>
Saya sengaja meninggalkan .*
berikut )
karena konstruktor tersebut tidak dimaksudkan untuk memberikan pengecualian (mereka tidak dimaksudkan untuk melakukan apa pun).
Tentu saja ada kasus ketiga di mana Anda mungkin ingin memiliki konstruktor kosong untuk kelas non-utilitas. Dalam kasus seperti itu, saya akan merekomendasikan agar Anda meletakkan a methodContext
dengan tanda tangan konstruktor yang tepat.
<clover-setup initString="${build.dir}/clovercoverage.db" enabled="${with.clover}">
<methodContext name="prvtCtor" regexp="^private *[a-zA-Z0-9_$]+Util *( *) *"/>
<methodContext name="myExceptionalClassCtor" regexp="^private MyExceptionalClass()$"/>
</clover-setup>
Jika Anda memiliki banyak kelas luar biasa seperti itu, Anda dapat memilih untuk memodifikasi reg-ex konstruktor privat umum yang saya sarankan dan menghapusnya Util
. Dalam kasus ini, Anda harus memastikan secara manual bahwa efek samping konstruktor Anda masih diuji dan dicakup oleh metode lain di kelas / proyek Anda.
<clover-setup initString="${build.dir}/clovercoverage.db" enabled="${with.clover}">
<methodContext name="prvtCtor" regexp="^private *[a-zA-Z0-9_$]+ *( *) .*"/>
</clover-setup>