गोलंग उप-निर्देशिका में परीक्षण करता है


121

मैं कार्यक्षेत्र क्लीनर रखने के लिए उपनिर्देशिका के रूप में पैकेज के लिए परीक्षणों और उदाहरणों के साथ गो में एक पैकेज बनाना चाहता हूं। क्या यह संभव है और यदि ऐसा हो तो कैसे?

सभी दस्तावेज़ीकरण हमेशा परीक्षण कोड को अन्य कोड के समान स्थान पर रखता है, क्या यह किसी तरह से बेहतर है या केवल सम्मेलन है?


5
नोट: go test ./...वर्तमान फ़ोल्डर और सभी सबफ़ोल्डर्स पर परीक्षण चलाएगा । देखें नीचे मेरा उत्तर
VonC


मैं भी यही सोच रहा था। परीक्षण करने में परेशानी नहीं होती है, क्योंकि अलग-थलग dirtor क्योंकि समान स्तर पर diretor में उप dirs होते हैं।
गंदी_विलास

जवाबों:


203

ध्यान दें कि आप "पुनरावर्ती" चला सकते हैं go test: आपको उन सभी पैकेजों को सूचीबद्ध करने की आवश्यकता है जिन्हें आप परीक्षण करना चाहते हैं

यदि आप अपने Go प्रोजेक्ट के रूट फोल्डर में हैं, तो टाइप करें:

go test ./...

" कमांड " के " पैकेज सूचियों का विवरण./... " अनुभाग में ' ' अंकन का वर्णन किया गया है :go

एक आयात पथ एक पैटर्न है यदि इसमें एक या एक से अधिक ...वाइल्डकार्ड शामिल हैं, जिनमें से प्रत्येक रिक्त स्ट्रिंग और स्लैश वाले स्ट्रिंग सहित किसी भी स्ट्रिंग से मेल खा सकता है।

इस तरह GOPATHके पैटर्न के पैटर्न से मेल खाने वाले नामों के साथ पेड़ों में पाए जाने वाले सभी पैकेज निर्देशिकाओं का विस्तार होता है ।

एक विशेष मामले के रूप में , साथ ही साथ उपनिर्देशिका से x/...मेल खाता है । उदाहरण के लिए, अपनी उपनिर्देशिकाओं में विस्तार और पैकेज करता है।xx
net/...net


यदि आप अपनी _test.goफ़ाइलों को एक सबफ़ोल्डर में रखते हैं, तो ' go test ./...' कमांड उन्हें उठा सकेगी।
परंतु:

  • आपको अपने निर्यात किए गए चर और फ़ंक्शंस (अपने परीक्षणों में प्रयुक्त) को अपने पैकेज के नाम के साथ उपसर्ग करने की आवश्यकता होगी, परीक्षण फ़ाइल के लिए पैकेज निर्यात की गई सामग्री तक पहुंचने में सक्षम होने के लिए।
  • आप गैर-निर्यात की गई सामग्री तक नहीं पहुंच पाएंगे।

यह कहा जा रहा है, मैं अभी भी _test.goफ़ाइल को मुख्य स्रोत फ़ाइल के पास रखना पसंद करूंगा : यह खोजना आसान है।


4
कुछ लोग निजी सामान पर गैर-पहुंच का तर्क दे सकते हैं, सामान्य ब्लैक-बॉक्स परीक्षण और बेहतर है। सार्वजनिक प्रतीकों को अर्हता प्राप्त करने के संबंध में, आप हमेशा _ "..." आयात कर सकते हैं।
ddevienne

15

अपने कोड के साथ अपने परीक्षण को उसी निर्देशिका में फ़ाइल में रखें file_test.goजहां "फ़ाइल" उस स्रोत कोड फ़ाइल का नाम है जिसे आप परीक्षण कर रहे हैं। यह सम्मेलन है और मैंने इसे अपने अनुभव में सर्वश्रेष्ठ पाया है।

यदि go testटूल आपके लिए पर्याप्त स्वचालित नहीं है, तो आप GoConvey में देख सकते हैं , जिसमें एक वेब UI है जो स्वचालित रूप से पारंपरिक Go परीक्षणों को अपडेट करेगा और चलाएगा साथ ही GoConvey परीक्षण (जो व्यवहार पर आधारित हैं, और अधिक स्व-दस्तावेजीकरण कर रहे हैं) पारंपरिक गो परीक्षणों की तुलना में)।


2
GoConvey कमाल है (और मैं उच्च प्रत्याशा के साथ नए UI का इंतजार कर रहा हूं)। मैं इसे अपने वर्तमान प्रोजेक्ट में github.com/VonC/asciidocgo/blob/master/abstractNode_test.go , उदाहरण के लिए) के रूप में उपयोग कर रहा हूं । हालांकि, go testसबफ़ोल्डर्स के लिए भी काम कर सकते हैं। देखें नीचे मेरा उत्तर
VonC

आप सही हैं। वास्तव में, यह शायद इस प्रश्न के लिए मेरे उत्तर से अधिक प्रासंगिक है।
मैट

10

संपादित

VonC के उत्तर पर निर्मित,

में यह उत्तर मान्य है go1.11। अभी तक ऊपरी goसंस्करणों में परीक्षण नहीं किया गया है ।

आप में से उन लोगों के लिए जो उप-फ़ोल्डर में अपना परीक्षण रखना पसंद करते हैं, कहते हैं test, फिर चल रहे हैं

go test ./...

हर फ़ोल्डर में परीक्षण चलाने का प्रयास करेंगे , यहां तक ​​कि उन जिनमें कोई भी परीक्षण शामिल नहीं है, इस प्रकार ?गैर-परीक्षण फ़ोल्डर के लिए बाद की रिपोर्ट में है।

चल रहा है

go test ./.../test

इसके बजाय केवल आपके testफ़ोल्डरों को लक्षित करेगा , इस प्रकार केवल आपके परीक्षण फ़ोल्डरों पर एक साफ रिपोर्ट केंद्रित है।

सावधान

कृपया ध्यान रखें कि परीक्षण उप-फ़ोल्डर्स का उपयोग कवरेज रिपोर्ट गणना को रोक देगा। गो की फिलॉस्फी पैकेज फ़ोल्डर में परीक्षण फ़ाइलों को छोड़ने के लिए है।


1
अच्छा टिप, मेरे पांच साल पुराने जवाब के अलावा। अपवोटेड
VonC

प्रिय अन्ना, कृपया समझाएं कि क्या काम नहीं करता है? और आपके जाने का संस्करण क्या है? तुम क्या करने की कोशिश कर रहे हो? मुझे बाद में एहसास हुआ कि इस पद्धति को कोड कवरेज की गणना करने की अनुमति नहीं है, जो कि एक किटी है। क्या तुम्हारे कहने का मतलब यही था?
avi.elkharrat

1
go test ./.../testरिटर्न go: warning: "./.../test" matched no packages// केवल परीक्षण फ़ोल्डर को लक्षित नहीं करता है। go संस्करण go1.13 darwin / amd64
anna

1
@ मादो, यह समझ में आता है, क्योंकि गोलंग परीक्षणों और कोड के अलगाव को प्रोत्साहित नहीं करता है। विसंगति यह पिछले संस्करणों में अनुमति देने के लिए थी।
avi.elkharrat

1
@ avi.elkharrat और वास्तव में मैंने इस दृष्टिकोण को अब और पर्स नहीं करने का फैसला किया है, भले ही मुझे अपने परीक्षणों को एक अलग पैकेज / फ़ोल्डर में रखना पसंद था = (
मेडो

-4

मैं सामान्य रूप से परीक्षण नहीं करता, लेकिन आप अपनी फ़ाइल को निर्देशिकाओं में समूहित कर सकते हैं और आयात का उपयोग कर सकते हैं

import "./models"यदि एक स्तर बाहर है
import "../modelsतो एक स्तर बाहर और एक स्तर अंदर है

उदाहरण के लिए, इसके लिए:
./models/todo.go
./test/todo_test.go

परीक्षण करने के लिए todo.goसे todo_test.go, में अपने आयात todo_test.goकिया जाएगा

import "../models"


कोड आयात करने की यह विधि केवल उजागर कार्यों के लिए काम करती है। ऐसा लगता नहीं है कि वे एक ही पैकेज में हैं, यहां तक ​​कि आपने उन्हें स्पष्ट रूप से एक ही पैकेज में रखा है। तो यह समाधान वास्तव में इकाई परीक्षण के लिए समस्या का समाधान नहीं करता है।
पेंगुइन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.