আমি কি ইউনিট পরীক্ষায় কনসোলে লিখতে পারি? যদি হ্যাঁ, তবে কনসোল উইন্ডোটি খুলবে না কেন?


148

আমার ভিজ্যুয়াল স্টুডিওতে একটি পরীক্ষা প্রকল্প রয়েছে। আমি মাইক্রোসফ্ট.ভিউজুয়ালস্টুডিও.টেষ্টটুলস.উনিটটেষ্টিং ব্যবহার করি।

আমি আমার ইউনিট পরীক্ষার একটিতে এই লাইনটি যুক্ত করেছি:

Console.WriteLine("Some foo was very angry with boo");
Console.ReadLine();

আমি যখন পরীক্ষা চালাচ্ছি, পরীক্ষা পাস হয় তবে কনসোল উইন্ডো মোটেও খোলা হয় না।

কনসোল উইন্ডোটি কোনও ইউনিট পরীক্ষার মাধ্যমে ইন্টারঅ্যাক্ট করার জন্য কী কী উপায় আছে?


1
এটি সত্যিই রানারের উপর নির্ভর করে। আপনি টেস্টড্রিভন. নেট ব্যবহার করতে পারেন (একটি দুর্দান্ত, ব্যক্তিগত ব্যবহারের জন্য নিখরচায়, টেস্ট রানার) - কনসোল.উরাইটলাইন ভিএস আউটপুট ফলকে লিখবে।
কুখ্যাত

1
টেস্টড্রাইভন.নেটে কথাটি ছড়িয়ে দেওয়ার জন্য ধন্যবাদ
গ্রেফক্স 374

এনক্রাঞ্চের এই বৈশিষ্ট্যটিও রয়েছে, যা একাই এটির জন্য মূল্যবান আইএমও করে তোলে। আমার কাছে একটি Dumpএক্সটেনশন পদ্ধতি রয়েছে যা আইটেমের সামগ্রীগুলি কনসোলে আউটপুট করে দেয়, ডিবাগ করা এত সহজ করে তোলে। i.imgur.com/MEZwy7X.png
ধর্মতুর্তেল

উত্তর:


125

দ্রষ্টব্য: নীচের মূল উত্তরটি ভিএস ২০১২ এর মাধ্যমে ভিএস আপের যে কোনও সংস্করণের জন্য কাজ করবে। ভিএস ২০১৩-তে কোনও পরীক্ষার ফলাফল উইন্ডো রয়েছে বলে মনে হয় না। পরিবর্তে, যদি আপনার পরীক্ষা-নির্দিষ্ট আউটপুট প্রয়োজন হয় তবে আপনি Trace.Write()আউটপুট উইন্ডোতে আউটপুট লিখতে @ স্ট্রেচের পরামর্শটি ব্যবহার করতে পারেন ।


Console.Writeপদ্ধতি "কনসোল" লিখতে না - এটা লিখেছেন যাই হোক না কেন চলমান প্রক্রিয়ার জন্য মান আউটপুট হ্যান্ডেল করতে লাগানো আপ হয়। একইভাবে, Console.Readস্ট্যান্ডার্ড ইনপুট পর্যন্ত যা কিছু জড়িত তা থেকে ইনপুট পড়ে।

আপনি যখন ভিএস 2010 এর মাধ্যমে ইউনিট পরীক্ষা চালান, তখন স্ট্যান্ডার্ড আউটপুটটি পরীক্ষার জোতা দ্বারা পুনঃনির্দেশিত হয় এবং পরীক্ষার আউটপুটটির অংশ হিসাবে সঞ্চিত হয়। আপনি টেস্ট ফলাফল উইন্ডোটিতে ডান ক্লিক করে এবং প্রদর্শনীতে "আউটপুট (স্টডআউট)" নামক কলামটি যুক্ত করে এটি দেখতে পারেন। এটি স্ট্যান্ডআউটে লেখা ছিল এমন কোনও কিছুই প্রদর্শন করবে।

আপনি পারে নিজে একটি কনসোল উইন্ডো খুলতে, পি / ডাকা ব্যবহার @ sinni800 যেমন বলেছেন। AllocConsoleডকুমেন্টেশন পড়া থেকে , এটি ফাংশনটি পুনরায় সেট হবে stdinএবং stdoutনতুন কনসোল উইন্ডোতে নির্দেশ করতে পরিচালনা করবে appears (আমি এটি সম্পর্কে ১০০% নিশ্চিত নই; আমি যদি ইতিমধ্যে stdoutউইন্ডোজ আমার কাছ থেকে এটি চুরি করে নিয়ে যাওয়ার জন্য পুনঃনির্দেশ দিয়েছি তবে এটি আমার পক্ষে ভুল হবে বলে মনে হচ্ছে ।)

সাধারণভাবে, যদিও, আমি এটি একটি খারাপ ধারণা বলে মনে করি; আপনি যে কনসোলটি ব্যবহার করতে চান তা হ'ল যদি আপনার ইউনিট পরীক্ষা সম্পর্কে আরও তথ্য ছড়িয়ে দেওয়া হয় তবে আউটপুটটি আপনার জন্য রয়েছে। Console.WriteLineআপনি যেভাবে আছেন সেভাবে ব্যবহার চালিয়ে যান এবং শেষ হয়ে গেলে ফলাফল ফলাফল উইন্ডোতে আউটপুট ফলাফলগুলি পরীক্ষা করে দেখুন।


একটি কনসোল বরাদ্দ করার জন্য অলোকসনসোল ব্যবহার করে একটি নতুন উইন্ডোজ অ্যাপ্লিকেশন খোলার চেষ্টা করুন এবং এটি সেখানে লেখা হবে। আমি জানি না এটি আসলে কী করে তবে এটি কোনও ইউনিট পরীক্ষার পরিবেশে কাজ না করে। সত্যিই জেনে ভালো লাগবে ...
sinni800

এইচআরএম। AllocConsoleডকুমেন্টেশন পুনরায় পড়া , আমি ভুল হতে পারে, কিন্তু আমি এটি পরীক্ষা করতে হবে।
মাইকেল ইডেনফিল্ড

2
আমার জন্য মাইকের এই মন্তব্যটি সম্পর্কে যা ভাবার দরকার তা বলেছিল: "আপনি যখন ভিএস 2010 এর মাধ্যমে ইউনিট পরীক্ষা চালাবেন, তখন স্ট্যান্ডার্ড আউটপুটটি পরীক্ষার জোড়ায় পুনঃনির্দেশিত করা হয় এবং পরীক্ষার আউটপুট অংশ হিসাবে সংরক্ষণ করা হয়।"
রবার্ট প্যাটারসন

5
ভিএস ২০১৩-এ, যদি কনসোলে আপনার লেখা থাকে তবে টেস্টএক্সপ্লোরার / পরীক্ষা / সংক্ষিপ্তসারে একটি [আউটপুট] লিঙ্ক লেবেল থাকবে। এটিতে ক্লিক করুন এবং আপনি পছন্দসই আউটপুট পাবেন। কেন অপেক্ষা করবেন? আপনি কনসোল কল করতে চান। রিডলাইন () ??
ভিসার

3
ভি2017 (সম্প্রদায়) এ, "পরীক্ষা এক্সপ্লোরার" এ যান, তালিকার পরীক্ষার ফলাফল আইটেমটি নির্বাচন করুন, তারপরে অন্য উইন্ডোতে (ফলাফল ফলাফল উইন্ডো?) লিঙ্কটি ক্লিক করুন। যেহেতু এটি সম্ভবত কেটে যাবে, তাই "সমস্ত অনুলিপি করুন" এবং অন্য কোথাও অতীত ব্যবহার করুন।
হারিংগার

180

কেউ ভিএস ২০১৩ এ দৃশ্যত নতুন কার্যকারিতা সম্পর্কে মন্তব্য করেছিলেন। তিনি প্রথমে কী বোঝাতে চেয়েছিলেন তা আমি নিশ্চিত ছিলাম না, তবে এখন যেটা আমি করি, আমি মনে করি এটির নিজের উত্তরই প্রাপ্য।

আমরা সাধারণত কনসোল.উইটলাইন ব্যবহার করতে পারি এবং আউটপুট প্রদর্শিত হয়, আউটপুট উইন্ডোতে নয়, পরীক্ষার বিবরণীতে "আউটপুট" ক্লিক করার পরে একটি নতুন উইন্ডোতে প্রদর্শিত হয়।

এখানে চিত্র বর্ণনা লিখুন


2
দুর্দান্ত সমাধান। এটি VS2015 এন্টারপ্রাইজে কাজ করে তা নিশ্চিত করুন।
গারফব্রাজাজ

6
দুর্ভাগ্যক্রমে, অনুলিপি-অনুলিপি করার জন্য আউটপুট অঞ্চলে যে কোনও পাঠ্য নির্বাচন করা যায় না :( তারা কী ভাবছিলেন ?!
অথবা ম্যাপার

3
@ORMapper, উপর "স্ট্যান্ডার্ড আউটপুট" ক্ষেত্রটি ডান ক্লিক, এবং পছন্দ করে নিন সব কপি
bychance

2
@ ওভি-ওয়ানকেনোবি কনসোল দিয়ে কিছু আউটপুট দেওয়ার চেষ্টা করুন W রাইট
টিয়াগো ডুয়ার্তে

5
বনাম 2017 এ আপনাকে রান করা প্রতিটি পরীক্ষা নির্বাচন করতে হবে, তারপরে আউটপুট ক্লিক করুন - যখন আপনার অনেক পরীক্ষা হয় তখন খুব কার্যকর হয় না। আমি সমস্ত আউটপুট এক সাথে দেখতে চাই - পৃথক উইন্ডোতে নয়।
inliner49er

37

আপনি এই লাইনটি ভিজ্যুয়াল স্টুডিওর আউটপুট উইন্ডোতে লিখতে ব্যবহার করতে পারেন :

System.Diagnostics.Debug.WriteLine("Matrix has you...");

ডিবাগ মোডে চলতে হবে।


7
এটি আমার ভিএস
লুইস ফিলিপ

1
বিশদগুলির জন্য এই থ্রেডটি পরীক্ষা করুন - stackoverflow.com/questions/1159755/…
দিমিত্রি পাভলভ

1
এটি আউটপুট দেখতে এমএসটিস্ট এবং আর # ব্যবহার করে আমার পক্ষে দুর্দান্ত কাজ করেছে। ধন্যবাদ!
আইজাক বাকের

2
@ উইলিয়াম এটি দেখায় যে আপনি কোনও পরীক্ষা ডিবাগ করেন, তবে এটি যদি আপনি ডিবাগিং না করে চালিয়ে যান তবে তা নয়।
yoyo

29

যেমন বলা হয়েছে, ইউনিট টেস্টগুলি ইন্টারঅ্যাকশন ছাড়াই চালানোর জন্য ডিজাইন করা হয়েছে।

তবে আপনি অন্যান্য কোডের মতো ইউনিট পরীক্ষাও ডিবাগ করতে পারেন। সবচেয়ে সহজ উপায় হল টেস্ট ফলাফল ট্যাবে ডিবাগ বোতামটি ব্যবহার করা।

ডিবাগ করতে সক্ষম হওয়ার অর্থ ব্রেকপয়েন্টগুলি ব্যবহার করতে সক্ষম হওয়া। ব্রেকপয়েন্টগুলি ব্যবহার করতে সক্ষম হওয়া, তারপরে ট্র্যাসপয়েন্টগুলি ব্যবহার করতে সক্ষম হওয়া যা আমি প্রতিদিন ডিবাগিংয়ে অত্যন্ত দরকারী বলে মনে করি।

মূলত, ট্র্যাসপয়েন্টস আপনাকে আউটপুট উইন্ডোতে (বা আরও সঠিকভাবে স্ট্যান্ডার্ড আউটপুটে) লেখার অনুমতি দেয়। .চ্ছিকভাবে, আপনি চালনা চালিয়ে যেতে পারেন, বা আপনি নিয়মিত ব্রেকপয়েন্টের মতো থামতে পারেন। এটি আপনাকে আপনার কোডটি পুনর্নির্মাণের প্রয়োজন ছাড়াই, বা ডিবাগের তথ্য দিয়ে পূরণ করার "ক্রিয়াশীলতা" দেয়।

কেবল একটি ব্রেকপয়েন্ট যুক্ত করুন এবং তারপরে সেই ব্রেকপয়েন্টে ডান ক্লিক করুন। "যখন হিট ..." বিকল্পটি নির্বাচন করুন: হিট বিকল্প যখন

যা সংলাপটি নিয়ে আসে: ব্রেকআপপয়েন্ট যখন হিট হয়

কয়েকটি বিষয় লক্ষণীয়:

  1. লক্ষ্য করুন যে ব্রেকথপয়েন্টটি এখন একটি গোলকের পরিবর্তে একটি হীরা হিসাবে দেখানো হয়েছে যা কোনও ট্রেস পয়েন্ট নির্দেশ করে
  2. আপনি কোনও ভেরিয়েবলের মানটিকে এই জাতীয় los এর মতো করে আউটপুট করতে পারেন}
  3. কোনও নিয়মিত ব্রেকপয়েন্টের মতো এই লাইনে কোড ব্রেক করার জন্য "চালিয়ে যাওয়া চালিয়ে যাওয়া" চেকবাক্সটি নির্বাচন করুন
  4. আপনার কাছে ম্যাক্রো চালানোর বিকল্প রয়েছে। দয়া করে সতর্ক হন - আপনার ক্ষতিকারক পার্শ্ব প্রতিক্রিয়া হতে পারে।

আরও বিশদ জন্য ডকুমেন্টেশন দেখুন।


24

সি # তে ভিজ্যুয়াল স্টুডিও ইউনিট পরীক্ষা থেকে আউটপুট লেখার বিভিন্ন উপায় রয়েছে:

  • কনসোল.ওরাইট - ভিজ্যুয়াল স্টুডিও পরীক্ষার জোড় এটি ক্যাপচার করবে এবং যখন আপনি টেস্ট এক্সপ্লোরারে পরীক্ষাটি নির্বাচন করবেন এবং আউটপুট লিঙ্কটি ক্লিক করবেন তখন তা প্রদর্শন করবে। না না ভিসুয়াল স্টুডিও আউটপুট উইন্ডোতে প্রদর্শিত যখন পারেন চলমান বা একটি ইউনিট পরীক্ষা ডিবাগ (তর্কসাপেক্ষে এই একটি বাগ সংশোধন করা হয়)।
  • ডিবাগ.ওরাইট - ভিজ্যুয়াল স্টুডিও পরীক্ষার জোড় এটি এটিকে ক্যাপচার করবে এবং এটি টেস্ট আউটপুটে প্রদর্শিত হবে। নেই ভিসুয়াল স্টুডিও আউটপুট উইন্ডোতে প্রদর্শিত যখন একটি ইউনিট পরীক্ষা ডিবাগ, যদি না ভিসুয়াল স্টুডিও ডিবাগ অপশন তাৎক্ষণিক উইন্ডো পুনর্চালনা আউটপুট করার জন্য কনফিগার করা হয়। আপনি যদি ডিবাগিং না করে পরীক্ষা চালিয়ে যান তবে আউটপুট (বা তাত্ক্ষণিক) উইন্ডোতে কিছুই উপস্থিত হবে না। ডিফল্টরূপে কেবল একটি ডিবাগ বিল্ডে উপলব্ধ (এটি, যখন ডিইবিইউজি ধ্রুবক সংজ্ঞায়িত হয়)।
  • ট্রেস.ওরাইট - ভিজ্যুয়াল স্টুডিও পরীক্ষার জোড় এটি এটিকে ক্যাপচার করবে এবং এটি টেস্ট আউটপুটে প্রদর্শিত হবে। না ভিসুয়াল স্টুডিও আউটপুট (অথবা তাৎক্ষণিক) উইন্ডো প্রদর্শিত একটি একক পরীক্ষা ডিবাগ (কিন্তু কেবল ডিবাগ ছাড়া পরীক্ষা চলছে যখন)। ডিবাগ এবং রিলিজ উভয় বিল্ডে ডিফল্টরূপে উপলব্ধ (এটি যখন ট্র্যাক ধ্রুবক সংজ্ঞায়িত হয়)।

ভিজ্যুয়াল স্টুডিও 2013 পেশাদারে নিশ্চিত হয়েছে।


1
মনে রাখবেন যে আপনি যদি বিল্ট-ইন মাইক্রোসফ্ট টেস্ট ফ্রেমওয়ার্কের চেয়ে ভিজুয়াল স্টুডিওর জন্য নুনিট এবং নুনিট টেস্ট অ্যাডাপ্টার এক্সটেনশন ব্যবহার করেন তবে বিধিগুলি কিছুটা আলাদা।
yoyo

9

তুমি ব্যবহার করতে পার

Trace.WriteLine() 

ইউনিটেস্ট ডিবাগ করার সময় আউটপুট উইন্ডোতে লিখতে।


5

ভিজ্যুয়াল স্টুডিও 2017 এ, "টেস্টকন্টেক্সট" টেস্ট এক্সপ্লোরারটিতে আউটপুট লিঙ্কটি দেখায় না। তবে ট্রেস.উইটলাইন () ওপুট লিঙ্কটি দেখায়।


সবেমাত্র একটি এফওয়াইআই, এটির ট্রেস.উইটলাইন
ট্রয়স্টেভেন

4

সবকটি ইউনিটের পরীক্ষার মধ্যে প্রথমে হ'ল ডিজাইন অনুসারে , কোনও মিথস্ক্রিয়া ছাড়াই সম্পূর্ণ চলমান run

এদিকে পাশাপাশি, আমি মনে করি না এমন কোনও সম্ভাবনা আছে যা ভেবেছিল।

আপনি অলোকসনসোল পি / ইনভোকের সাহায্যে হ্যাকিংয়ের চেষ্টা করতে পারেন যা আপনার বর্তমান অ্যাপ্লিকেশনটি জিইউআই অ্যাপ্লিকেশন হওয়া সত্ত্বেও কনসোলটি খুলবে। Consoleবর্গ তারপর এখন খোলা কনসোলে পোস্ট করতে হবে।


1
হুম .. আমার মূল উদ্দেশ্য হ'ল কিছু গভীর বিশদ দেখতে কনসোলে কিছু অতিরিক্ত ডেটা লেখা। এটি অ্যাডহক জিনিস হবে যা আমার পরে প্রয়োজন হবে না।
পেন্সিলকেকে


2

আইএমএইচও আউটপুট বার্তাটি বেশিরভাগ ক্ষেত্রে ব্যর্থ পরীক্ষার ক্ষেত্রে প্রাসঙ্গিক। আমি নীচের বিন্যাসটি তৈরি করেছি, আপনি নিজেরও তৈরি করতে পারেন। এটি ভিএস টেস্ট এক্সপ্লোরার উইন্ডোতে প্রদর্শিত হয়।

ভিএস টেস্ট এক্সপ্লোরার উইন্ডোতে এই বার্তাটি কীভাবে নিক্ষেপ করবেন? এর মতো একটি নমুনা কোড কাজ করা উচিত।

if(test_condition_fails)
    Assert.Fail(@"Test Type: Positive/Negative.
                Mock Properties: someclass.propertyOne: True
                someclass.propertyTwo: True
                Test Properties: someclass.testPropertyOne: True
                someclass.testPropertyOne: False
                Reason for Failure: The Mail was not sent on Success Task completion.");

আপনার জন্য এটি উত্সর্গীকৃত একটি পৃথক শ্রেণি থাকতে পারে। আশা করি এটা সাহায্য করবে!


আমি ঠিক করেছি আমি এটিকেও যুক্ত করব। এক্সুনিট ব্যবহার করে ভিজ্যুয়াল স্টুডিও 2019-এ আপনি নিম্নলিখিতগুলি করতে পারেন: আসর্ট.ট্রু (সাফল্য, "রেকর্ড ফেইল্ড মুছে ফেলুন"); মুছে ফেলুন রেকর্ড ফেইলড তারপরে ভিএস 2019 টেস্ট এক্সপ্লোরারে প্রদর্শিত হবে। আবার, উপরের উত্তরের মতো, এটি কেবল তখনই কাজ করে যখন আপনার ইউনিট পরীক্ষাটি প্রত্যাশিত শর্তটিতে ব্যর্থ হয়।
ট্রয়স্টেভেন

1

আমার একটি সহজ সমাধান রয়েছে (যা আমি নিজেকে অলস কারণে বেশিরভাগ ক্ষেত্রেই ব্যবহার করেছি)। আপনি যে শ্রেণিতে কাজ করছেন সেটিতে এই পদ্ধতিটি যুক্ত করুন:

public static void DumbDebug(string message)
    {
        File.WriteAllText(@"C:\AdHocConsole\" + message + ".txt", "this is really dumb, I wish microsoft had more obvious solutions to it's solutions' problems.");
    }

তারপরে ... ডিরেক্টরি অ্যাডহককনসোল খুলুন, তৈরির সময় অনুসারে অর্ডার করুন। নিশ্চিত হয়ে নিন যে আপনি যখন আপনার 'মুদ্রণ বিবৃতি' যুক্ত করেন তবে সেগুলি স্বতন্ত্র, অন্যথায় জাগ্রত হবে।


0

ম্যাকের জন্য ভিজ্যুয়াল স্টুডিও

অন্য কোনও সমাধান ম্যাকের জন্য ভিএস-তে কাজ করে নি

আপনি যদি নুনিট ব্যবহার করছেন , আপনি নিজের সমাধানে একটি ছোট .NET কনসোল প্রকল্প যুক্ত করতে পারেন , তারপরে সেই নতুন কনসোল প্রকল্পের রেফারেন্সে আপনি যে প্রকল্পটি পরীক্ষা করতে চান তা উল্লেখ করুন

আপনি আপনার [Test()]পদ্ধতিগুলিতে যা করছিলেন তা Mainএই ফ্যাশনে কনসোল অ্যাপ্লিকেশনটিতে করা যেতে পারে :

class MainClass
{
    public static void Main(string[] args)
    {
        Console.WriteLine("Console");

        // Reproduce the Unit Test
        var classToTest = new ClassToTest();
        var expected = 42;
        var actual = classToTest.MeaningOfLife();
        Console.WriteLine($"Pass: {expected.Equals(actual)}, expected={expected}, actual={actual}");
    }
}

আপনি এই পরিস্থিতিতে আপনার কোড Console.Writeএবং ব্যবহারে Console.WriteLineনির্দ্বিধায় রয়েছেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.