t.Log()
পরীক্ষা শেষ হওয়ার পরে দেখাবে না, সুতরাং আপনি যদি কোনও পরীক্ষা হ্যাং বা খারাপভাবে সম্পাদন করে যা ডিবাগ করার চেষ্টা করছেন তবে মনে হয় আপনার এটি ব্যবহার করা দরকার fmt
।
হ্যাঁ: এটি ছিল 1.13 (আগস্ট 2019) পর্যন্ত অন্তর্ভুক্ত case
এবং এটি 24929 সংখ্যায় অনুসরণ করা হয়েছিলgolang.org
নিম্নলিখিত (নিরীহ) স্বয়ংক্রিয় পরীক্ষাগুলি বিবেচনা করুন:
func TestFoo(t *testing.T) {
t.Parallel()
for i := 0; i < 15; i++ {
t.Logf("%d", i)
time.Sleep(3 * time.Second)
}
}
func TestBar(t *testing.T) {
t.Parallel()
for i := 0; i < 15; i++ {
t.Logf("%d", i)
time.Sleep(2 * time.Second)
}
}
func TestBaz(t *testing.T) {
t.Parallel()
for i := 0; i < 15; i++ {
t.Logf("%d", i)
time.Sleep(1 * time.Second)
}
}
যদি আমি চালানোর go test -v
, আমি সব না হওয়া পর্যন্ত কোন লগ আউটপুট পেতে TestFoo
সম্পন্ন করা হয় , তারপর সব পর্যন্ত কোন আউটপুট TestBar
সম্পন্ন করা হয়, এবং সব যে পর্যন্ত না আবার কোন আউটপুট TestBaz
সম্পন্ন করা হয়।
পরীক্ষাগুলি যদি কাজ করে তবে এটি ঠিক আছে, তবে যদি কিছু প্রকারের বাগ থাকে তবে এমন কয়েকটি ক্ষেত্রে রয়েছে যেখানে বাফারিং লগ আউটপুট সমস্যাযুক্ত:
- স্থানীয়ভাবে পুনরাবৃত্তি করার সময়, আমি পরিবর্তন করতে সক্ষম হতে চাই, আমার পরীক্ষা চালাতে পারি, লগগুলিতে কী ঘটছে তা তাত্ক্ষণিকভাবে দেখুন, পরীক্ষা প্রয়োজন তাড়াতাড়ি বন্ধ করতে সিটিআরএল + সি চাপুন, আবার পরিবর্তন করুন, পুনরায়- পরীক্ষা চালানো, ইত্যাদি।
যদি TestFoo
ধীর হয় (উদাহরণস্বরূপ, এটি একটি ইন্টিগ্রেশন পরীক্ষা), আমি পরীক্ষার একেবারে শেষ না হওয়া পর্যন্ত লগ আউটপুট পাই না। এটি উল্লেখযোগ্যভাবে পুনরাবৃত্তি হ্রাস করে।
- যদি
TestFoo
কোনও বাগ থাকে যা এর ফলে এটি ঝুলতে পারে এবং কখনই সম্পূর্ণ হয় না, আমি কোনও লগ আউটপুট পাব না। এই ক্ষেত্রে t.Log
এবং এগুলি মোটেই t.Logf
কার্যকর নয়।
এটি ডিবাগিংকে খুব কঠিন করে তোলে।
- তদুপরি, আমি কেবল লগ আউটপুট পাই না, তবে পরীক্ষাটি যদি খুব বেশি সময় ঝুলে থাকে, হয় গো পরীক্ষার সময়সীমাটি 10 মিনিটের পরে পরীক্ষাটি মেরে ফেলবে, বা আমি যদি সময়সীমা বাড়িয়ে দিই, অনেক সিআই সার্ভারগুলি পরীক্ষা না করেও শেষ করে দিবে যদি না থাকে নির্দিষ্ট সময়ের পরে লগ আউটপুট (উদাহরণস্বরূপ, সার্কেলসিআই-তে 10 মিনিট)।
সুতরাং এখন আমার পরীক্ষাগুলি মারা গেছে এবং আমাকে কী হয়েছে তা বলার জন্য লগগুলিতে আমার কিছুই নেই।
তবে (সম্ভবত) Go 1.14 (Q1 2020): সিএল 127120
পরীক্ষা: ভার্বোস মোডে স্ট্রিম লগ আউটপুট
আউটপুট এখন:
=== RUN TestFoo
=== PAUSE TestFoo
=== RUN TestBar
=== PAUSE TestBar
=== RUN TestGaz
=== PAUSE TestGaz
=== CONT TestFoo
TestFoo: main_test.go:14: hello from foo
=== CONT TestGaz
=== CONT TestBar
TestGaz: main_test.go:38: hello from gaz
TestBar: main_test.go:26: hello from bar
TestFoo: main_test.go:14: hello from foo
TestBar: main_test.go:26: hello from bar
TestGaz: main_test.go:38: hello from gaz
TestFoo: main_test.go:14: hello from foo
TestGaz: main_test.go:38: hello from gaz
TestBar: main_test.go:26: hello from bar
TestFoo: main_test.go:14: hello from foo
TestGaz: main_test.go:38: hello from gaz
TestBar: main_test.go:26: hello from bar
TestGaz: main_test.go:38: hello from gaz
TestFoo: main_test.go:14: hello from foo
TestBar: main_test.go:26: hello from bar
--- PASS: TestFoo (1.00s)
--- PASS: TestGaz (1.00s)
--- PASS: TestBar (1.00s)
PASS
ok dummy/streaming-test 1.022s
এটি ডেভ চেনি " go test -v
স্ট্রিমিং আউটপুট " -তে সত্যায়িত হিসাবে, এটি আসলে গো 1.14 তে রয়েছে :
যান 1.14 সালে go test -v
স্ট্রিম হবে t.Log
আউটপুট যেমন বরং পরীক্ষা রান শেষে তিল এটা মজুদ করার পরিবর্তে, ঘটে ।
অধীন যেতে 1.14 fmt.Println
এবং t.Log
লাইন আছে ইন্টারলিভড্ , বরং সম্পূর্ণ পরীক্ষা জন্য অপেক্ষা, যে পরীক্ষা আউটপুট যখন প্রবাহিত হয় প্রদর্শক চেয়ে go test -v
ব্যবহৃত হয়।
ডেভ অনুসারে সুবিধা:
এটি সংহত শৈলীর পরীক্ষাগুলির জন্য জীবনের উন্নতির একটি দুর্দান্ত মানের যা পরীক্ষায় ব্যর্থ হলে প্রায়শই দীর্ঘ সময়ের জন্য পুনরায় চেষ্টা করে।
স্ট্রিমিং t.Log
আউটপুট গোফারদের তাদের আউটপুট প্রাপ্তির জন্য পুরো পরীক্ষার সময় শেষ না হওয়া পর্যন্ত পরীক্ষার ব্যর্থতার ডিবাগ করতে সহায়তা করবে।