Menguji Pemalar dalam Go
Satu cabaran biasa semasa menulis program Go ialah menguji kod yang bergantung pada nilai tetap. Secara lalai, pemalar tidak boleh ditakrifkan semula setelah ditakrifkan, menjadikannya sukar untuk mensimulasikan persekitaran yang berbeza semasa ujian.
Senario Masalah
Pertimbangkan kod berikut:
<code class="go">package main import ( "net/http" "net/http/httptest" ) const baseUrl = "http://google.com" func main() { // Logic that uses baseUrl }</code>
Untuk tujuan ujian, anda ingin menetapkan baseUrl kepada URL pelayan ujian. Walau bagaimanapun, mentakrifkan semula const baseUrl dalam fail ujian anda akan mengakibatkan ralat:
<code class="go">// in main_test.go const baseUrl = "test_server_url" // Error: const baseUrl already defined</code>
Penyelesaian
Untuk mengatasi had ini, anda boleh memfaktorkan semula kod anda untuk mengalih keluar const dan gunakan fungsi sebaliknya. Contohnya:
<code class="go">func GetUrl() string { return "http://google.com" } func main() { // Logic that uses GetUrl() }</code>
Dalam fail ujian anda, anda boleh mentakrifkan semula fungsi untuk mengembalikan URL pelayan ujian:
<code class="go">// in main_test.go func GetUrl() string { return "test_server_url" }</code>
Pendekatan Lain
Jika anda memilih untuk mengekalkan nilai const, anda boleh mencipta fungsi kedua yang mengambil URL asas sebagai parameter dan mewakilkan pelaksanaan sebenar kepada fungsi asal:
<code class="go">const baseUrl_ = "http://google.com" func MyFunc() string { // Call other function passing the const value return myFuncImpl(baseUrl_) } func myFuncImpl(baseUrl string) string { // Same implementation that was in your original MyFunc() function }</code>
Dengan menggunakan pendekatan ini, anda boleh menguji pelaksanaan MyFunc() dengan menguji myFuncImpl(), menghantar URL asas yang berbeza untuk setiap kes ujian. Selain itu, fungsi MyFunc() asal kekal selamat kerana ia sentiasa menghantar baseUrl_ tetap kepada myFuncImpl().
Atas ialah kandungan terperinci Bagaimana untuk Menguji Kod Go yang Bergantung pada Nilai Malar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!