2013-10-05 7 views
52

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

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

धन्यवाद।

+3

नोट: 'परीक्षण जाना/...' पर वर्तमान फ़ोल्डर * और * सभी सबफ़ोल्डर्स परीक्षण चलेंगे।। [नीचे मेरा जवाब] देखें (http://stackoverflow.com/a/21725603/6309) – VonC

+0

संभावित प्रोजेक्ट में [सभी परीक्षणों का परीक्षण कैसे करें \ 'परीक्षण करें?] (Http://stackoverflow.com/ प्रश्न/16353016/कैसे-टू-गो-टेस्ट-ऑल-टेस्टिंग्स-इन-माय-प्रोजेक्ट) –

+0

मैं वही बात सोच रहा था। परीक्षणों को एक अलग डीआईआर डालने में परेशानी हो रही है क्योंकि एक ही स्तर पर निवासी उप डीआईआर है। –

उत्तर

86

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

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

go test ./... 

'./...' अंकन अनुभाग "Description of package lists" "command go" के में वर्णित है:

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

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

एक विशेष मामले के रूप में, x/...x के साथ-साथ x की उपनिर्देशिकाएं भी मेल खाते हैं।
उदाहरण के लिए, net/...net और इसकी उपनिर्देशिका में संकुल तक फैलता है।


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

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

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

+1

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

10

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

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

+2

गोकॉन्वे अद्भुत है (और मैं उच्च उम्मीद के साथ नए यूआई की प्रतीक्षा कर रहा हूं)। मैं इसे अपने वर्तमान प्रोजेक्ट में https://github.com/VonC/asciidocgo/blob/master/abstractNode_test.go में उदाहरण के लिए उपयोग कर रहा हूं)। हालांकि, 'परीक्षण करें' उपफोल्डर के लिए भी काम कर सकता है। [नीचे मेरा जवाब] देखें (http://stackoverflow.com/a/21725603/6309) – VonC

+0

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

+0

इससे कोई फर्क नहीं पड़ता, GoConvey अभी भी चट्टानें;) – VonC

0

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

import "./models" अगर एक स्तर बाहर
import "../models अगर एक स्तर बाहर और

में एक स्तर है कर सकते हैं उदाहरण के लिए, के लिए:
./models/todo.go
./test/todo_test.go

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

import "../models"

+0

कोड आयात करने की यह विधि केवल उजागर कार्यों के लिए काम करती है। ऐसा व्यवहार प्रतीत नहीं होता है जैसे वे एक ही पैकेज में हैं, यहां तक ​​कि सोचा था कि आपने स्पष्ट रूप से उन्हें उसी पैकेज में रखा है। तो यह समाधान वास्तव में इकाई परीक्षण के लिए समस्या को हल नहीं करता है। –

0

कृपया निम्नलिखित github भंडार का प्रयास करें।

https://github.com/appleboy/golang-testing

आप golang परीक्षण स्क्रिप्ट डाउनलोड कर सकते हैं।

$ curl -fsSL https://raw.githubusercontent.com/appleboy/golang-testing/master/coverage.sh /usr/local/bin/coverage 
$ chmod +x /usr/local/bin/coverage 
संबंधित मुद्दे