এমএসটিস্ট টেস্ট কার্যকর করার সময় কীভাবে কনসোলে লিখবেন O


113

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

সমস্যা:
আমি এখন এমএসটিস্ট এবং ওয়াটিএন ব্যবহার করে বিপুল সংখ্যক বার (কয়েক শতাধিক) ব্যর্থ হওয়ার অপারেশনটির পুনরাবৃত্তি করতে পুনরায় উত্পাদন করার চেষ্টা করছি। পরীক্ষাটি কতটা লুপে পৌঁছেছে সে সম্পর্কে কেবল একটি ক্লু জানতে, আমি এমন কিছু মুদ্রণ করতে চাই:

Console.WriteLine(String.Format("Uploaded file, attempt {0} of {1}", i, maxUploads));

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

প্রশ্ন: পরীক্ষার সঞ্চালনের সময়
আউটপুট উইন্ডোতে কনসোল আউটপুট পাওয়ার কোনও উপায় আছে কি?


: আপনি পরীক্ষার ফলাফল আউটপুট মুদ্রণ একটি উপায় জন্য চেহারা যদি stackoverflow.com/a/4787047/621690
Risadinha

উত্তর:


110

কনসোল আউটপুট প্রদর্শিত হচ্ছে না কারণ ব্যাকএন্ড কোড পরীক্ষার প্রসঙ্গে চলছে না।

আপনি সম্ভবত Trace.WriteLine(সিস্টেমে ডায়াগনস্টিকস ইন) ব্যবহার করে এবং তারপরে কোনও ফসলে লেখেন এমন ট্রেস শ্রোতা যুক্ত করার চেয়ে আরও ভাল।

এমএসডিএন থেকে এই বিষয় এটি করার একটি উপায় দেখায়।


মার্টি নেইল এবং ডেভ অ্যান্ডারসনের মন্তব্য অনুসারে:

using System;
using System.Diagnostics;

...

Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));
// or Trace.Listeners.Add(new ConsoleTraceListener());
Trace.WriteLine("Hello World");

72
তাই মূলত, Trace.Listeners.Add(new TextWriterTraceListener(Console.Out)); Trace.WriteLine("Hello World");
মার্টি নিল

7
হুম, আমি খোঁজার করছি @Martin নীল দ্বারা পরামর্শ উভয় পাঠায় Trace.WriteLine()এবং Console.WriteLine()আউটপুট পরীক্ষার ফলাফল দেখুন , না আউটপুট দেখুন । (এবং মনে রাখবেন মধ্যে পরীক্ষার ফলাফল দেখুন , এটি যোগ করা প্রয়োজন হতে পারে আউটপুট (stdout- এ) ডান ক্লিক এবং নির্বাচন করে কলাম যোগ / অপসারণ কলাম ... ।) কিন্তু, সম্ভবত আমি এখনও আউটপুট এইজন্য করছি না আউটপুট দেখার অর্থ হ'ল আমি কিছু মিস করছি ...
ডেভিডআর

2
Trace.Listeners.Add(new ConsoleTraceListener());যথেষ্ট এবং তারপরে আউটপুট উইন্ডোতে ডিবাগ থেকে আউটপুট দেখান।
ডেভ অ্যান্ডারসন

3
আমি আসলে ভিএস ২০১7-এ আউটপুটটি খুঁজে পেতে লড়াই করে যাচ্ছিলাম ... টেস্টএক্সপ্লোরার উইন্ডো -> স্বতন্ত্র পরীক্ষায় ক্লিক করুন -> যদি পরীক্ষার উত্তরণ ঘটে, তবে অতিবাহিত সময়ের মধ্যে বিশদ উইন্ডোতে "আউটপুট" শব্দটি রয়েছে যা একটি লিঙ্ক একটি নতুন উইন্ডো।
মাইক ওয়ালশ

1
আপনি যদি Xunit ব্যবহার করছেন তবে কেবলমাত্র ctor এর মাধ্যমে ITestOutputHelper এ যান এবং এতে WritLine কল করুন। ইন্টিগ্রেশন টেস্টিংয়ের সময় কীভাবে লিখবেন তা জানতে পেরে কিছুক্ষণ সময় নিয়েছি, আশা করি এটি কারও সহায়ক হবে।
আলেকজান্ডার হস্ট

69

ব্যবহার করুন Debug.WriteLine। এটি আপনার বার্তাটি সাথে সাথে Outputউইন্ডোতে প্রদর্শিত হবে। একমাত্র সীমাবদ্ধতা হ'ল আপনার পরীক্ষাটি অবশ্যই Debugমোডে চালানো উচিত ।

[TestMethod]
public void TestMethod1()
{
    Debug.WriteLine("Time {0}", DateTime.Now);
    System.Threading.Thread.Sleep(30000);
    Debug.WriteLine("Time {0}", DateTime.Now);
}

আউটপুট

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


8
প্রয়োজনusing System.Diagnostics;
কিমিওট

4
ডেটটাইম.নাউ ব্যবহার করবেন না। স্টপওয়াচ ( এমএসডিএন.মাইক্রোসফটকম
en

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

5
@InteXX নিশ্চিত করুন যে আপনি "পরীক্ষাটি চালান" নয়, "পরীক্ষাটি ডিবাগ করুন" ক্লিক করেছেন click এটি আমার পক্ষে কাজ করেছে
জন হেন্কেল

@ জনহেন্কেল: গোটচা। ধন্যবাদ। তা করবে। বাস্তবে স্কালিয়াসোস তার উত্তরে ঠিক ঠিক বলেছেন; আমি কীভাবে এটি মিস করেছি তা নিশ্চিত নয়।
ইন্টএক্সএক্স

13

আমি আমার নিজের একটি সমাধান খুঁজে পেয়েছি। আমি জানি যে আন্দ্রেস উত্তর সম্ভবত এমএসটিস্টের সাথে সর্বাধিক সামঞ্জস্যপূর্ণ তবে আমার কোডটি রিফ্যাক্টর করার মতো মনে হয়নি।

[TestMethod]
public void OneIsOne()
{
    using (ConsoleRedirector cr = new ConsoleRedirector())
    {
        Assert.IsFalse(cr.ToString().Contains("New text"));
        /* call some method that writes "New text" to stdout */
        Assert.IsTrue(cr.ToString().Contains("New text"));
    }
}

নিষ্পত্তিযোগ্য ConsoleRedirectorহিসাবে সংজ্ঞায়িত করা হয়:

internal class ConsoleRedirector : IDisposable
{
    private StringWriter _consoleOutput = new StringWriter();
    private TextWriter _originalConsoleOutput;
    public ConsoleRedirector()
    {
        this._originalConsoleOutput = Console.Out;
        Console.SetOut(_consoleOutput);
    }
    public void Dispose()
    {
        Console.SetOut(_originalConsoleOutput);
        Console.Write(this.ToString());
        this._consoleOutput.Dispose();
    }
    public override string ToString()
    {
        return this._consoleOutput.ToString();
    }
}

3

আমার একই সমস্যা ছিল এবং আমি পরীক্ষাগুলি "চলমান" ছিলাম। আমি যদি পরীক্ষাগুলির পরিবর্তে "ডিবাগ" করি তবে ডিবাগ আউটপুট অন্য সকল ট্রেস এবং কনসোলের মতো ঠিক দেখায় shows আপনি যদি পরীক্ষাগুলি "চালান" করেন তবে আউটপুট কীভাবে দেখতে হবে তা আমি জানি না।


System.Diagnostics.Debug.WriteLineডিবাগিং টেস্টগুলি ব্যবহার করে দেখানোর জন্য আমি কিছু পেতে পারি তবে আপনি কীভাবে Console.WriteLineকাজ করবেন? এটি আমার জন্য স্বাভাবিক (লাইভ আপডেট) আউটপুটে শেষ হয় না।
বা ম্যাপার

পরীক্ষা চালানোর সময় আপনি কি আউটপুট দেখার কোনও উপায় খুঁজে পেয়েছেন?
হিমা

0

আপনি আরও ভাল একটি একক পরীক্ষা সেট আপ এবং এই পরীক্ষা থেকে একটি পারফরম্যান্স পরীক্ষা তৈরি করুন। আপনি ডিফল্ট সরঞ্জাম সেট ব্যবহার করে এই অগ্রগতি নিরীক্ষণ করতে পারেন।


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

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