ইউনিট পরীক্ষা থেকে আউটপুট কীভাবে লিখব?


113

আমার ইউনিটের কোনও কল ডিবাগ করার সময় কেবল Debug.Write(line)বা Console.Write(Line)কেবল এড়িয়ে যায় এবং আউটপুট কখনই মুদ্রিত হয় না। ক্লাসের মধ্যে থেকে এই ফাংশনগুলিতে কল করা আমি কাজের সূক্ষ্ম ব্যবহার করছি।

আমি বুঝতে পারি যে ইউনিট পরীক্ষাটি বোঝানো হচ্ছে স্বয়ংক্রিয় করা, তবে আমি এখনও একটি ইউনিট পরীক্ষা থেকে বার্তা আউটপুট দিতে সক্ষম হতে চাই।

উত্তর:


127

TestContext.WriteLine()পরীক্ষার ফলাফলগুলিতে কোন পাঠ্যকে আউটপুট করে তা ব্যবহার করার চেষ্টা করুন ।

উদাহরণ:

    [TestClass]
    public class UnitTest1
    {
        private TestContext testContextInstance;

        /// <summary>
        ///  Gets or sets the test context which provides
        ///  information about and functionality for the current test run.
        ///</summary>
        public TestContext TestContext
        {
            get { return testContextInstance; }
            set { testContextInstance = value; }
        }

        [TestMethod]
        public void TestMethod1()
        {
            TestContext.WriteLine("Message...");
        }
    }

"ম্যাজিক" এমএসডিএন-তে বর্ণিত হয়েছে "পরীক্ষার কাঠামোটি স্বয়ংক্রিয়ভাবে সম্পত্তি সেট করে যা আপনি ইউনিট পরীক্ষায় ব্যবহার করতে পারেন।"


7
আমি খুঁজে পেয়েছি (ভিএস ২০১৩ সহ) পরীক্ষাটি ডিবাগ মোডে চালিত হলে এটি কেবল কিছু প্রিন্ট করে।
ফুসী


আমি লক্ষ্য করছি যে যদি আপনার স্ট্রিংটিতে কোঁকড়ানো ধনুর্বন্ধনী থাকে তবে পদ্ধতিটি ফুরিয়ে যায়। সুতরাং "_টেক্সট কনটেক্সট. রাইটলাইন (" হ্যালো ");" "_টেস্ট কনটেক্সট.উইটলাইন (" সে {ll} o ")) কাজ করে; "সিস্টেম.ফর্ম্যাট এক্সসেপশন: ব্যর্থ হয়: ইনপুট স্ট্রিংটি সঠিক ফর্ম্যাটে ছিল না।"
মাইকে কে

1
টেস্টকন্টেক্সটে রাইটলাইন পদ্ধতি একই পরামিতি নেয় যা কনসোল rite রাইট্রাইটরাইটলাইন নেয়। এর অর্থ এই যে স্ট্রিংটি একটি ফর্ম্যাটিং স্ট্রিং (ডকুমেন্টস.মাইক্রোসফ্ট.কম / ডটনেট / স্ট্যান্ডার্ড / বেজ- টাইপস /… তে নথিভুক্ত )। একটি স্ট্রিংয়ে আক্ষরিক use ব্যবহার করতে, আপনাকে এটি দ্বিগুণ করতে হবে। আপনার স্ট্রিং মুদ্রণ করতে WritLine ব্যবহার করুন ("তিনি {{ll}} o");
ওয়াল্টার

1
এটি আকর্ষণীয় ছিল ... যদিও আমি এখনও জানি না কেন তারা এই এবং অনুরূপ বৈশিষ্ট্যগুলিকে একটি বেস ক্লাস বা ইন্টারফেসে যুক্ত করেনি যা আমরা কাঠামো থেকে বিভ্রান্তি এড়াতে ব্যবহার করতে পারি।
নিক্লাস

149

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

এই পদ্ধতির কোনওটি আউটপুট উইন্ডোতে কাজ করতে বা আউটপুট প্রদর্শন করতে প্রদর্শিত হবে না:

    Trace.WriteLine("test trace");
    Debug.WriteLine("test debug");
    TestContext.WriteLine("test context");
    Console.WriteLine("test console");

ভিজ্যুয়াল স্টুডিও 2012 এবং আরও বেশি

(মন্তব্য থেকে) ভিজ্যুয়াল স্টুডিও 2012 এ, কোনও আইকন নেই। পরিবর্তে, পরীক্ষার ফলাফলগুলির একটি লিঙ্ক রয়েছে যার নাম আউটপুট । আপনি যদি লিঙ্কটিতে ক্লিক করেন তবে আপনি সমস্তটি দেখতে পাবেন WriteLine

ভিজ্যুয়াল স্টুডিও 2012 এর আগে

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


44
ভিজ্যুয়াল স্টুডিও 2012 এ, কোনও আইকন নেই। পরিবর্তে, পরীক্ষার ফলাফলগুলিতে একটি লিঙ্ক রয়েছে যার নাম "আউটপুট"। আপনি যদি লিঙ্কটিতে ক্লিক করেন তবে আপনি সমস্ত লিখিতলাইন দেখতে পাবেন।
Epotter

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

@ কেভিন, আপনি ভিএস এর কোন সংস্করণে তা দেখেছেন? (আমি ধরে নিচ্ছি আপনি "টেক্সট এক্সপ্লোরার" এর পরিবর্তে "টেস্ট এক্সপ্লোরার" বোঝাচ্ছেন)) আমি ভিএস ২০১৩ এক্সপ্রেসে কোনও আউটপুট লিঙ্কটি দেখতে পাচ্ছি না
মাইক সি

1
যদি কেউ বিস্মিত হন (আমার মতো) এর মধ্যে কোনটি টিআরএক্স (পরীক্ষার ফলাফল আউটপুট) ফাইলে উপস্থিত হয় তবে এটি "ডিবাগ.উইরাইটলাইন" ব্যতীত উপরের সমস্ত কিছুই রয়েছে।
ব্যাজারস্পট

4
ভিজ্যুয়াল স্টুডিও 2017 এ এটি এখনও 'আউটপুট' লিঙ্ক।
হ্যাঙ্ককা

66

ভিজ্যুয়াল স্টুডিও 2017 এ, আপনি পরীক্ষার এক্সপ্লোরার থেকে আউটপুট দেখতে পারেন।

1) আপনার পরীক্ষার পদ্ধতিতে কনসোল.উরাইটলাইন ("কিছু");

2) পরীক্ষা চালান।

3) টেস্ট এক্সপ্লোরার উইন্ডোতে, পাস করা পরীক্ষার পদ্ধতিটি ক্লিক করুন।

4) এবং "আউটপুট" লিঙ্কটি ক্লিক করুন।

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

এবং "আউটপুট" ক্লিক করুন, আপনি কনসোল.রাইটলাইন () এর ফলাফল দেখতে পাবেন। এখানে চিত্র বর্ণনা লিখুন


1
চমৎকার। ভিজ্যুয়াল স্টুডিও / সি # বিকাশের জন্য আমার আদর্শ নয়, এটি কেবল আমার প্রয়োজন! এই পোস্ট করার জন্য আপনাকে ধন্যবাদ।
matt32

10
আমি 2017 সংস্করণ ব্যবহার করছি 15.5.6 বিট ও আউটপুট লিঙ্কটি দেখতে পাবে না।
মাইক আইটি

1
এটি কোন পরীক্ষার কাঠামোটি ব্যবহার করছে তার উপর নির্ভর করে? আমি .NET 4.6 পরীক্ষা প্রকল্পে xUnit 2.4 ব্যবহার করছি এবং কোনও "স্ট্যান্ডার্ড আউটপুট" ফল উপস্থিত হবে না। থেকে আউটপুট Console.WriteLineহয় "টেস্ট" এর অধীনে আউটপুট ফলকে দৃশ্যমান নয়।
কিওয়ারটি

এক্সউনিতের জন্য, জোনজিমের উত্তর আমার পক্ষে কাজ করেছিল, এমনকি পরীক্ষার দ্বারা উত্পন্ন আলাদা থ্রেডেও।
কিওয়ার্টি

1
তাদের জন্য "আউটপুট" লিঙ্কটি দেখেনি। 1) আপনার একটি পরীক্ষা পদ্ধতি নির্বাচন করা উচিত । 2) টেস্ট এক্সপ্লোরার উইন্ডোটি ভিএস উইন্ডোটিকে উল্লম্বভাবে পূরণ করতে দিন অন্যথায় লিঙ্কটি লুকানো ছিল এবং স্ক্রোল বারটি লক্ষ্য করা বা ব্যবহার করার জন্য খুব ছোট।
মেও বিড়াল 2012

18

এটি আপনার পরীক্ষার রানারের উপর নির্ভর করে ... উদাহরণস্বরূপ, আমি এক্স ইউনাইট ব্যবহার করছি , সুতরাং আপনি যদি এটি ব্যবহার করছেন তবে এই নির্দেশাবলী অনুসরণ করুন:

https://xunit.github.io/docs/capturing-output.html

এই পদ্ধতিটি প্রতিটি নির্দিষ্ট ইউনিট পরীক্ষার সাথে আপনার আউটপুটকে দলবদ্ধ করে।

using Xunit;
using Xunit.Abstractions;

public class MyTestClass
{
    private readonly ITestOutputHelper output;

    public MyTestClass(ITestOutputHelper output)
    {
        this.output = output;
    }

    [Fact]
    public void MyTest()
    {
        var temp = "my class!";
        output.WriteLine("This is output from {0}", temp);
    }
}

আপনার আউটপুট উইন্ডোতে লেখার জন্য আমি সরবরাহ করা লিঙ্কটিতে আরও একটি পদ্ধতি তালিকাবদ্ধ রয়েছে তবে আমি আগেরটি পছন্দ করি।


4

আমি মনে করি এটি এখনও বাস্তব।

আপনি এই নিউগেট প্যাকেজটি ব্যবহার করতে পারেন: বিটক্সিজেন.স্টেস্টিং.পেন

এই লাইব্রেরি থেকে কাস্টম রাইটলাইন পদ্ধতিতে কল করুন । এটি আউটপুট উইন্ডোর ভিতরে একটি পরীক্ষামূলক ফল তৈরি করে এবং সর্বদা সেখানে বার্তা রাখে (প্রতিটি পরীক্ষার সময় এটি DEBUG এবং ট্র্যাক পতাকা থেকে স্বতন্ত্রভাবে চালিত হয়)।

ট্রেসিং আরও সহজ করার জন্য আমি বেস ক্লাস তৈরির জন্য সুপারিশ করতে পারি:

[TestClass]
public abstract class BaseTest
{
    #region Properties
    public TestContext TestContext { get; set; }

    public string Class
    {
        get { return this.TestContext.FullyQualifiedTestClassName; }
    }
    public string Method
    {
        get { return this.TestContext.TestName; }
    }
    #endregion

    #region Methods
    protected virtual void Trace(string message)
    {
        System.Diagnostics.Trace.WriteLine(message);

        Output.Testing.Trace.WriteLine(message);
    }
    #endregion
}

[TestClass]
public class SomeTest : BaseTest
{
    [TestMethod]
    public void SomeTest1()
    {
        this.Trace(string.Format("Yeah: {0} and {1}", this.Class, this.Method));
    }
}

1
যাদুটি এখানে: আউটপুট.টেষ্টিং.ট্রেস.উরাইটলাইন (বার্তা); বিট অক্সিজেন সহ
বিমল পাউডেল

বর্তমান ভিজ্যুয়াল স্টুডিও সংস্করণে কাজ করে না আপনি একটি ত্রুটি পানCould not load file or assembly 'Microsoft.VisualStudio.Shell.12.0,
কনসোল

@ কনসোল হ্যাঁ এর কিছুটা সমর্থন দরকার তবে আমি নিশ্চিত নই যে এইভাবে আউটপুট দেওয়ার ক্ষেত্রে সম্প্রদায়টি আকর্ষণীয় কিনা। xUnit এর আউটপুটহ্যান্ডলার রয়েছে এবং ভিএস এর ফলাফল প্রদর্শন করতে পারে।
ম্যাক্সিম

1

ব্যবহার করার চেষ্টা করুন:

Console.WriteLine()

কলটি কেবল Debug.WriteLineতখনই করা হবে যখন DEBUG সংজ্ঞায়িত হয়।

অন্যান্য পরামর্শগুলি ব্যবহার করতে হবে: Trace.WriteLineপাশাপাশি, তবে আমি এটি চেষ্টা করে দেখিনি।

একটি বিকল্প রয়েছে (ভিজ্যুয়াল স্টুডিও ২০০৮ এটি আছে কিনা তা নিশ্চিত নয়) তবে আপনি আইডিইতে বিকল্পটি Debug.WriteLineদিয়ে পরীক্ষা চালানোর পরেও ব্যবহার করতে পারবেন Test With Debugger


1

নিম্নলিখিত উদাহরণ দিয়ে সমাধান:

public void CheckConsoleOutput()
{
    Console.WriteLine("Hello, World!");
    Trace.WriteLine("Trace Trace the World");
    Debug.WriteLine("Debug Debug World");
    Assert.IsTrue(true);
}

এই পরীক্ষাটি চালানোর পরে, 'টেস্ট পাস' এর অধীনে আউটপুট দেখার বিকল্প রয়েছে, যা আউটপুট উইন্ডোটি নিয়ে আসবে।


1

এটি জোনজিম যেমন উল্লেখ করেছেন তেমন পরীক্ষার উপর নির্ভর করে। নুনিট 3 এর জন্য আমাকে NUnit.Framework.TestContext.Progress.WriteLine()ভিজ্যুয়াল স্টুডিও 2017 এর আউটপুট উইন্ডোতে চলমান আউটপুট পেতে ব্যবহার করতে হয়েছিল।

নুনিট কীভাবে এটি বর্ণনা করে: এখানে

আমার বোঝার জন্য এটি পরীক্ষার প্রয়োগকারীরা পরীক্ষার প্রয়োগকারীদের প্রাপ্ত সমান্তরালতার চারপাশে ঘোরে।


0

যখন আমার টেস্ট / টেস্ট সেটিংস / ডিফল্ট প্রসেসর আর্কিটেকচার সেটিং এবং আমার পরীক্ষার প্রকল্পের রেফারেন্সগুলি একই না হয় এমন সম্মেলনে আমি কোনও আউটপুট পাই না। অন্যথায় ট্রেস.উইটলাইন () ঠিকঠাক কাজ করে।


0

কনসোল.উরাইটলাইন কাজ করবে না। ডিবাগ মোডে কেবলমাত্র ডিবাগ.উইটলাইন () বা ট্রেস.উরাইটলাইন () কাজ করবে।

আমি নিম্নলিখিতগুলি করি: পরীক্ষার মডিউলে System.Diagnostics ব্যবহার করে অন্তর্ভুক্ত করুন । তারপরে, আমার আউটপুটটির জন্য ডিবাগ.উইরাইটলাইন ব্যবহার করুন, পরীক্ষায় ডান ক্লিক করুন , ডিবাগ নির্বাচিত পরীক্ষাগুলি নির্বাচন করুন । ফলাফল আউটপুট এখন নীচে আউটপুট উইন্ডো প্রদর্শিত হবে। আমি ভিজ্যুয়াল স্টুডিও 2017 বনাম 15.8.1 ব্যবহার করি, ডিফল্ট ইউনিট পরীক্ষার কাঠামো ভিএস সরবরাহ করে।


0

আপনি কি নিশ্চিত যে আপনি নিজের ইউনিট টেস্টগুলি ডিবাগে চালাচ্ছেন? ডিবাগ.উইটলাইনকে রিলিজ বিল্ডগুলিতে ডাকা হবে না।

চেষ্টা করার জন্য দুটি বিকল্প হ'ল:

  • ট্রেস.উরাইটলাইন (), যা রিলিজ বিল্ট করার সাথে সাথে ডিবাগে অন্তর্নির্মিত

  • ইউনিট পরীক্ষার জন্য আপনার বিল্ড সেটিংসে DEBUG অপরিবর্তিত করুন


0

আমি এক্স ইউনাইট ব্যবহার করছি তাই এটিই আমি ব্যবহার করি:

Debugger.Log(0, "1", input);

PS: আপনি খুব ব্যবহার করতে পারেন Debugger.Break();, যাতে আপনি আপনার লগ ইন দেখতে পারেন out



0

কারণ / সমাধানের একটি পৃথক রূপ:

আমার সমস্যাটি হ'ল আমি আউটপুট পাচ্ছি না কারণ আমি একটি অ্যাসিঙ্ক্রোনাস লিনকিউ কল থেকে একটি অ্যাসিঙ্ক্রোনাস প্রসঙ্গে লুপে কনসোলটিতে ফলাফল সেট লিখছিলাম:

var p = _context.Payment.Where(pp => pp.applicationNumber.Trim() == "12345");

p.ForEachAsync(payment => Console.WriteLine(payment.Amount));

এবং সুতরাং পরীক্ষাটি রানটাইম দ্বারা পরিষ্কার করার আগে কনসোলটিতে লেখেনি (কেবলমাত্র একটি পরীক্ষা চলাকালীন)।

সমাধানটি ছিল ফলাফলটিকে প্রথমে একটি তালিকায় রূপান্তর করা, যাতে আমি forEach () এর অ-অবিচ্ছিন্ন সংস্করণটি ব্যবহার করতে পারি:

var p = _context.Payment.Where(pp => pp.applicationNumber.Trim() == "12345").ToList();

p.ForEachAsync(payment =>Console.WriteLine(payment.Amount));

0

ইন বনাম 2019

  1. মূল ভিএস মেনু বারে ক্লিক করুন: View->Test Explorer
  2. টেস্ট এক্সপ্লোরার -> ডিবাগ এ আপনার পরীক্ষা পদ্ধতিতে ডান ক্লিক করুন
  3. additional outputনীচের স্ক্রিনশটে প্রদর্শিত লিঙ্কটি ক্লিক করুন ।

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

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

  • Debug.WriteLine
  • Console.WriteLine
  • TestContext.WriteLine

সমস্ত অতিরিক্ত আউটপুট উইন্ডোতে লগ হবে।


-1

Trace.WriteLineআপনি যদি সঠিক আউটপুট ( আউটপুট উইন্ডোতে পাওয়া "থেকে আউটপুট দেখান" লেবেলযুক্ত ড্রপডাউন নির্বাচন করেন) কাজ করা উচিত ।

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