উপ-ডিরেক্টরিতে গোলং পরীক্ষা


120

ওয়ার্কস্পেস ক্লিনার রাখার জন্য প্যাকেজটির উপ-ডিরেক্টরি হিসাবে পরীক্ষা এবং উদাহরণ সহ আমি গোতে একটি প্যাকেজ তৈরি করতে চাই। এটি কি সম্ভব এবং যদি হয় তবে কীভাবে?

সমস্ত ডকুমেন্টেশন সবসময় টেস্টিং কোডটিকে অন্য কোডের মতো একই জায়গায় রাখে, এটি কোনও উপায়ে বা কেবল কনভেনশনেই ভাল?


5
দ্রষ্টব্য: go test ./...বর্তমান ফোল্ডার এবং সমস্ত সাবফোল্ডারগুলিতে পরীক্ষা চালানো হবে । দেখুন নিচের আমার উত্তর
VonC


আমি একই জিনিস চিন্তা ছিল. পরীক্ষা করতে না পারলে না আলাদা ডিয়ার কারণ একই স্তরের ডিরেক্টরটিতে সাব ডায়ার রয়েছে।
ফিলিটি_উইজার্ড

উত্তর:


201

মনে রাখবেন যে আপনি "পুনরাবৃত্ত" চালাতে পারেনgo test : আপনার পরীক্ষা করতে চাইলে আপনার সমস্ত প্যাকেজ তালিকাভুক্ত করতে হবে

আপনি যদি নিজের গো প্রকল্পের মূল ফোল্ডারে থাকেন তবে টাইপ করুন:

go test ./...

' ./...' স্বরলিপি অধ্যায় "এ বর্ণনা করা হয়েছে প্যাকেজ তালিকার বর্ণনা " "এর কমান্ডgo ":

একটি আমদানি পথ হ'ল একটি নিদর্শন যদি এতে এক বা একাধিক ...ওয়াইল্ডকার্ড অন্তর্ভুক্ত থাকে, যার প্রতিটি খালি স্ট্রিং এবং স্ট্র্যাশযুক্ত স্ট্রিং সহ যে কোনও স্ট্রিংয়ের সাথে মেলে।

এই ধরণটি GOPATHগাছগুলিতে পাওয়া সমস্ত প্যাকেজ ডিরেক্টরিতে প্যাটার্নগুলির সাথে মিল রয়েছে matching

একটি বিশেষ কেস হিসাবে , x/...ম্যাচগুলির xপাশাপাশি xসাব-ডিরেক্টরিগুলি।
উদাহরণস্বরূপ, এর উপ-ডিরেক্টরিতে প্যাকেজগুলি net/...প্রসারিত হয় net


আপনি যদি আপনার _test.goফাইলগুলিকে সাবফোল্ডারে go test ./...রাখেন তবে ' ' কমান্ড এগুলি তুলতে সক্ষম হবে।
কিন্তু:

  • পরীক্ষার ফাইলটি প্যাকেজ রফতানি হওয়া সামগ্রীতে অ্যাক্সেস করতে সক্ষম হওয়ার জন্য আপনার প্যাকেজের নামের সাথে আপনার রফতানি ভেরিয়েবল এবং ফাংশনগুলি (আপনার পরীক্ষায় ব্যবহৃত) প্রিফিক্স করতে হবে।
  • আপনি অ-রফতানি সামগ্রী অ্যাক্সেস করতে পারবেন না।

বলা হচ্ছে, আমি এখনও _test.goফাইলটি মূল উত্স ফাইলের ঠিক পাশে রাখতে চাই : এটি সন্ধান করা আরও সহজ।


4
কেউ কেউ ব্যক্তিগত স্টাফগুলিতে অ্যাক্সেস না করার পক্ষে যুক্তি দিতে পারে সাধারণ ব্ল্যাক-বাক্স পরীক্ষা এবং আরও ভাল। সর্বজনীন প্রতীকগুলির যোগ্যতা অর্জনের বিষয়ে, আপনি সর্বদা _ "..." আমদানি করতে পারেন।
ddevienne

15

আপনার ডিরেক্টরিটিকে একই ডিরেক্টরিতে আপনার ডিরেক্টরি সহ এমন একটি ফাইল রাখুন file_test.goযেখানে "ফাইল" বলা হয় এমন উত্স কোড ফাইলের নাম যা আপনি পরীক্ষা করছেন। এটি কনভেনশন এবং এটি আমার নিজের অভিজ্ঞতায় সেরা বলে আমি খুঁজে পেয়েছি।

যদি go testসরঞ্জামটি আপনার জন্য যথেষ্ট পরিমাণে স্বয়ংক্রিয় না হয় তবে আপনি গোকনভেতে সন্ধান করতে পারেন যার একটি ওয়েব ইউআই রয়েছে যা স্বয়ংক্রিয়ভাবে traditionalতিহ্যবাহী গো পরীক্ষাগুলি আপডেট করবে এবং গোকনভে পরীক্ষাগুলি চালাবে যা আচরণের ভিত্তিতে এবং আরও স্ব-ডকুমেন্টিং রয়েছে traditionalতিহ্যবাহী গো পরীক্ষার চেয়ে)।


2
গোকনভে দুর্দান্ত (এবং আমি উচ্চ প্রত্যাশার সাথে নতুন ইউআইয়ের জন্য অপেক্ষা করছি)। আমি এটি আমার বর্তমান প্রকল্পে যেমন github.com/VonC/asciidocgo/blob/master/abstractNode_test.go হিসাবে ব্যবহার করছি ), যেমন। তবে go testসাবফোল্ডারগুলির জন্যও কাজ করতে পারে। দেখুন নিচের আমার উত্তর
VonC

তুমি সঠিক. আসলে, এই প্রশ্নের জন্য আমার উত্তর চেয়ে সম্ভবত এটি প্রাসঙ্গিক।
ম্যাট

10

সম্পাদিত

ভনসির উত্তরে নির্মিত,

এই উত্তরটি বৈধ go1.11। উচ্চ goসংস্করণে এখনও পরীক্ষা করা হয়নি ।

আপনারা যারা সাব-ফোল্ডারে তাদের পরীক্ষা রাখতে চান তাদের জন্য বলুন test, তারপরে দৌড়ানো

go test ./...

প্রতিটি ফোল্ডারে পরীক্ষা চালানোর চেষ্টা করবে , এমনকি কোনও পরীক্ষায় নেই এমনও রয়েছে, এইভাবে ?পরীক্ষার বিহীন ফোল্ডারগুলির পরবর্তী প্রতিবেদনে একটি পরীক্ষা রয়েছে।

চলমান

go test ./.../test

পরিবর্তে কেবলমাত্র আপনার testফোল্ডারগুলিকেই টার্গেট করবে , সুতরাং কেবলমাত্র আপনার পরীক্ষার ফোল্ডারে মনোযোগ নিবদ্ধ করে একটি পরিষ্কার প্রতিবেদন তৈরি করা হবে।

সতর্ক করা

দয়া করে মনে রাখবেন যে পরীক্ষার সাব-ফোল্ডারগুলি ব্যবহার করা কভারেজ রিপোর্টের গণনা রোধ করবে। প্যাকেজ ফোল্ডারগুলিতে পরীক্ষার ফাইলগুলি রেখে যাওয়ার ফ্লোলোসফি।


1
আমার পাঁচ বছরের পুরানো উত্তর ছাড়াও ভাল টিপ। আপভোটড
ভোনসি

প্রিয় আন্না, দয়া করে ব্যাখ্যা করুন কী কাজ করে না? এবং আপনার যেতে সংস্করণ কি? আপনি কি করতে চেষ্টা করছেন? আমি পরে বুঝতে পেরেছিলাম যে এই পদ্ধতিটি কোড কভারেজ গণনা করার অনুমতি দেয় না, এটি খুবই ক্ষুদ্র। এর মানে কি?
avi.elkharrat

1
go test ./.../testরিটার্ন go: warning: "./.../test" matched no packages// কেবল পরীক্ষার ফোল্ডারগুলিকেই লক্ষ্য করে না। go সংস্করণ go1.13 ডারউইন / এএমডি 64
আন্না

1
@ মাদেও, এটি সংবেদনশীল হবে, কারণ গোলং পরীক্ষা এবং কোড পৃথকীকরণকে উত্সাহ দেয় না। পূর্ববর্তী সংস্করণগুলিতে এটি অ্যানোমালিটি হ'ল।
avi.elkharrat

1
@ এআই.এলখারাত এবং বাস্তবে আমি এই পন্থাটি আর আলাদা না করার সিদ্ধান্ত নিয়েছি, যদিও আমি আমার পরীক্ষাগুলি একটি পৃথক প্যাকেজ / ফোল্ডারে রাখি = (
মাডিও

-4

আমি সাধারণত পরীক্ষা করি না, তবে আপনি নিজের ফাইলটিকে ডিরেক্টরিগুলিতে গোষ্ঠী করতে এবং আমদানির মতো ব্যবহার করতে পারেন

import "./models"যদি এক স্তর বাইরে
import "../modelsথাকে তবে এক স্তর বাইরে এবং এক স্তর যদি হয়

উদাহরণস্বরূপ, এর জন্য:
./models/todo.go
./test/todo_test.go

পরীক্ষা todo.goথেকে todo_test.go, আপনার আমদানি todo_test.goহতে হবে

import "../models"


কোড আমদানির এই পদ্ধতিটি কেবল উন্মুক্ত ফাংশনগুলির জন্যই কাজ করে। তারা একই প্যাকেজের মতো আচরণ করছে বলে মনে হচ্ছে না এমনকি আপনি ভেবেছিলেন যে সেগুলি স্পষ্টভাবে একই প্যাকেজটিতে রেখেছেন। সুতরাং এই সমাধানটি ইউনিট পরীক্ষার জন্য সমস্যাটি সত্যিই সমাধান করে না।
গ্রেসফুল পেঙ্গুইন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.