F #: Bagaimana cara menguji modul internal dari proyek lain?

Aug 19 2020

Saya mengikuti praktik F # terbaik dari dokumentasi .Net :

  • Saya membuat proyek untuk Aplikasi (konsol, bukan perpustakaan)
  • Saya membuat proyek untuk Tes (dengan Expecto tetapi tidak masalah)

Masalah: Beberapa modul Aplikasi saya tidak diekspos melalui internalkata kunci. Jadi saya tidak dapat mengimpor modul ini dalam proyek Tes saya.

=> Bagaimana saya bisa melakukan pengujian unit modul ini? Haruskah saya menghapus kontrol akses internal?

Terima kasih!

Jawaban

1 Abel Aug 19 2020 at 17:45

Untuk mengujinya internal, Anda dapat menggunakan InternalsVisibleTo, untuk menguji kelas privat, Anda dapat menautkan file dalam proyek pengujian Anda (saat Anda berada dalam dialog "tambahkan file", Anda dapat memilih tautan, bukan membuka).

Namun, seperti yang telah dikomentari, umumnya Anda hanya akan menguji antarmuka publik. Namun terkadang Anda juga ingin menguji internal yang kompleks secara terpisah. Misalnya di pustaka runtime .NET, ini sering dilakukan (ada banyak internal yang kompleks), dan mereka banyak menggunakan pendekatan penautan.

Karena privat benar-benar berarti privat bagi kelas, dan Anda bahkan tidak dapat mengakses anggota tersebut dari metode ekstensi, Anda harus meletakkan anggota tersebut di kelas privat mereka sendiri, sebagai anggota publik. Dengan begitu, saat Anda menautkan, kelas dapat diakses, dan juga anggota, tetapi tidak ada yang dapat diakses dalam versi produksi Anda.

Gunakan teknik ini dengan hemat, karena ini akan mengikat detail pribadi Anda ke sistem pengujian, dan Anda tidak akan sebebas itu mengubah penerapan internal.