Saya baru saja mulai dengan F #, yang merupakan bahasa fungsional pertama saya. Saya telah bekerja secara quasi-eksklusif dengan C #, dan menikmati banyak bagaimana F # membuat saya memikirkan kembali bagaimana saya menulis kode. Satu aspek yang menurut saya agak membingungkan adalah perubahan dalam proses penulisan kode. Saya telah menggunakan TDD selama bertahun-tahun di C # sekarang, dan sangat menghargai tes unit untuk mengetahui di mana saya berada.
Sejauh ini, proses saya dengan F # adalah menulis beberapa fungsi, bermain dengan mereka dengan konsol interaktif sampai saya "cukup" yakin mereka bekerja, dan men-tweak & menggabungkan. Ini berfungsi dengan baik pada masalah skala kecil seperti Proyek Euler, tetapi saya tidak dapat membayangkan membangun sesuatu yang besar seperti itu.
Bagaimana orang mendekati pengujian unit dan membangun rangkaian pengujian untuk program F #? Apakah ada yang setara dengan TDD? Setiap petunjuk atau pemikiran dihargai.
sumber
Jawaban:
Pengembang yang digerakkan oleh pengujian seharusnya merasa betah dalam bahasa fungsional seperti F #: fungsi kecil yang memberikan hasil yang dapat diulang secara deterministik cocok untuk pengujian unit. Ada juga kemampuan dalam bahasa F # yang memfasilitasi tes menulis. Ambil, misalnya, Ekspresi Objek . Anda dapat dengan mudah menulis palsu untuk fungsi yang menerima inputnya sebagai tipe antarmuka.
Jika ada, F # adalah bahasa berorientasi objek kelas satu dan Anda dapat menggunakan alat dan trik yang sama yang Anda gunakan saat melakukan TDD di C #. Ada juga beberapa alat pengujian yang ditulis atau khusus untuk F #:
Matthew Podwysocki menulis seri hebat tentang pengujian unit dalam bahasa fungsional. Paman Bob juga menulis artikel yang memancing pemikiran di sini .
sumber
Saya menggunakan NUnit, dan menurut saya tidak terlalu sulit untuk dibaca atau sulit ditulis:
Karena kode saya adalah campuran dari F # dan bahasa .Net lainnya, saya suka fakta bahwa saya menulis pengujian unit pada dasarnya dengan cara yang sama dan dengan sintaks yang serupa di F # dan C #.
sumber
`like this`
. Nama tes menggunakan formulir centang ganda dikenali.Lihat FsCheck , alat pengujian otomatis untuk F #, pada dasarnya adalah port dari QuickCheck Haskell. Ini memungkinkan Anda untuk memberikan spesifikasi program, dalam bentuk properti yang harus dipenuhi oleh fungsi atau metode, dan FsCheck menguji properti tersebut dalam sejumlah besar kasus yang dibuat secara acak.
FsCheck Halaman CodePlex
FsCheck Halaman Penulis
sumber
Seperti yang disarankan dglaubman, Anda dapat menggunakan NUnit. xUnit.net juga menyediakan dukungan untuk ini dan bekerja dengan baik dengan TestDriven.net . Kode tersebut terlihat mirip dengan pengujian NUnit tetapi tanpa persyaratan untuk menggabungkan pengujian dalam tipe yang memuatnya.
sumber
Saya pikir ini adalah pertanyaan yang sangat menarik yang banyak saya tanyakan sendiri. Pikiran saya sejauh ini hanyalah pikiran, jadi ambillah apa adanya.
Saya pikir jaring pengaman dari rangkaian pengujian otomatis adalah aset yang terlalu berharga untuk dilepaskan, betapapun menariknya konsol interaktif itu, jadi saya berencana untuk terus menulis pengujian unit seperti yang selalu saya lakukan.
Salah satu kekuatan utama .NET adalah kemampuan lintas bahasa. Saya tahu saya akan segera menulis kode produksi F #, tetapi rencana saya adalah menulis pengujian unit dalam C # untuk memudahkan jalan saya ke dalam bahasa baru bagi saya. Dengan cara ini, saya juga bisa menguji bahwa apa yang saya tulis di F # akan kompatibel dengan C # (dan bahasa .NET lainnya).
Dengan pendekatan ini, saya memahami bahwa ada fitur tertentu dari F # yang hanya dapat saya gunakan secara internal dalam kode F # saya, tetapi tidak diekspos sebagai bagian dari API publik saya, tetapi saya akan menerimanya, seperti yang saya terima hari ini bahwa ada hal-hal tertentu C # memungkinkan saya untuk mengekspresikan (suka
uint
) yang tidak sesuai dengan CLS, jadi saya menahan diri untuk tidak menggunakannya.sumber
Anda dapat melihat FSUnit - meskipun saya belum menggunakannya, mungkin patut dicoba. Tentunya lebih baik daripada menggunakan misalnya (asli) NUnit di F #.
sumber
Meskipun agak terlambat ke pesta, saya ingin menyambut Mathias ke F # (lebih baik terlambat daripada tidak sama sekali;)) dan berpadu bahwa Anda mungkin menyukai pustaka pengujian unit saya, Expecto
Expecto memiliki beberapa fitur yang mungkin Anda sukai:
-
https://github.com/haf/expecto/
sumber