MSTest परीक्षण के निष्पादन के दौरान Console.Out को कैसे लिखें


114

संदर्भ:
हमारे पास कुछ उपयोगकर्ता अपने वेब एप्लिकेशन में फ़ाइल अपलोड सुविधा के साथ समस्या की रिपोर्ट कर रहे हैं। यह केवल कभी-कभी और बिना किसी विशेष पैटर्न के होता है। हम लंबे समय से इसका पता लगाने की कोशिश कर रहे हैं, डिबग जानकारी को कहीं भी जोड़कर हम सोच सकते हैं कि यह मदद कर सकता है, लॉग को क्रॉल करना आदि है, लेकिन हम इसे पुन: उत्पन्न करने या इसका पता लगाने में सक्षम नहीं हैं।

समस्या:
मैं अब उस ऑपरेशन को दोहराने के लिए MSTest और WatiN का उपयोग करके इसे पुन: उत्पन्न करने की कोशिश कर रहा हूं जो कि बड़ी संख्या में (कई सैकड़ों) विफल करने के लिए माना जाता है। बस इस बात का सुराग होना चाहिए कि परीक्षण में कितनी दूर तक लूप आया है, मैं कुछ इस तरह छापना चाहता हूं:

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

हालाँकि यह आउटपुट विंडो में दिखाई नहीं देता है। अब मुझे पता है कि आपको परीक्षा परिणामों में कंसोल आउटपुट (साथ ही आप Debug.Writelineआदि से क्या आउटपुट मिलता है) मिलेगा , लेकिन यह परीक्षण समाप्त होने के बाद तक उपलब्ध नहीं है । और जब से सैकड़ों पुनरावृत्तियों के साथ मेरे परीक्षण में कुछ समय लग सकता है, मैं जानना चाहता हूं कि यह कितना दूर हो गया है।

प्रश्न:
क्या कोई तरीका है जिससे मैंपरीक्षण निष्पादन के दौरान आउटपुट विंडो में कंसोल आउटपुट प्राप्त कर सकता हूं?


यदि आप परीक्षा परिणाम के लिए प्रिंट करने के लिए एक रास्ता
खोजते हैं

जवाबों:


111

कंसोल आउटपुट दिखाई नहीं दे रहा है, क्योंकि बैकेंड कोड परीक्षण के संदर्भ में नहीं चल रहा है।

आप शायद Trace.WriteLine(In System.Diagnostics) का उपयोग करके बेहतर हैं और फिर एक ट्रेस श्रोता जो एक फ़ाइल में लिखते हैं, जोड़ रहे हैं।

MSDN का यह विषय ऐसा करने का एक तरीका दिखाता है।


मार्टी नील और डेव एंडरसन की टिप्पणियों के अनुसार:

using System;
using System.Diagnostics;

...

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

73
तो मूल रूप से, Trace.Listeners.Add(new TextWriterTraceListener(Console.Out)); Trace.WriteLine("Hello World");
मार्टी नील

7
हममम, मैं खोजने हूँ @Martin नील द्वारा सुझाव दोनों भेजता है Trace.WriteLine()और Console.WriteLine()करने के लिए उत्पादन टेस्ट परिणाम देखें , नहीं आउटपुट देखें । (और ध्यान दें कि में टेस्ट परिणाम देखें , इसे जोड़ने के लिए आवश्यक हो सकता है आउटपुट (stdout) राइट क्लिक करें और का चयन करके स्तंभ जोड़ें / निकालें कॉलम ... ।) लेकिन, शायद मैं अब भी में उत्पादन नहीं दिखाई दे रहा आउटपुट देखें का मतलब है कि मैं कुछ याद कर रहा हूं ...
डेविड

3
Trace.Listeners.Add(new ConsoleTraceListener());पर्याप्त है और फिर आउटपुट विंडो में डीबग से आउटपुट दिखाएं।
डेव एंडरसन

3
मैं वास्तव में VS2017 में आउटपुट खोजने के लिए संघर्ष कर रहा था ... TestExplorer विंडो -> एक व्यक्तिगत परीक्षण पर क्लिक करें -> यदि परीक्षण में ouput था, तो विस्तृत समय के तहत विस्तार विंडो में "ouput" शब्द है जो एक लिंक है एक नई विंडो।
माइक वाल्श

2
यदि आप Xunit का उपयोग कर रहे हैं, तो बस Ctor के माध्यम से ITestOutputHelper लें और उस पर WriteLine को कॉल करें। एकीकरण परीक्षण के दौरान लिखने का तरीका पता चलने से पहले कुछ समय लगा, आशा है कि इससे किसी को मदद मिलेगी।
अलेक्जेंडर हॉस्ट

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;
kmote

5
DateTime.Now का उपयोग न करें। स्टॉपवॉच ( msdn.microsoft.com/en-us/library/… ) का उपयोग करना बेहतर है
suizo

1
मुझे यह काम नहीं मिला। जब मैं परीक्षण चलाता हूँ तो आउटपुट विंडो तुरंत निर्माण के लिए स्विच करता है और डीबग के लिए कुछ भी नहीं भेजा जाता है। तुम्हारे विचार?
InteXX

5
@InteXX सुनिश्चित करें कि आप "परीक्षण को डिबग करें" पर क्लिक करें, न कि "परीक्षण चलाएं"। यह मेरे लिए काम करता है
जॉन हेन्केल

@ जॉनहोनेल: गोचचा। धन्यवाद। वह करेगा। वास्तव में शालियासोस अपने जवाब में ठीक यही कहता है; यकीन नहीं होता कि मैं कैसे चूक गया।
इंटेक्सएक्सएक्स

13

मुझे अपना खुद का एक समाधान मिला। मुझे पता है कि एंड्रास का उत्तर संभवतः MSTEST के साथ सबसे अधिक सुसंगत है, लेकिन मुझे अपने कोड को फिर से बनाने जैसा नहीं लगा।

[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

मेरे पास एक ही मुद्दा था और मैं परीक्षण चला रहा था। अगर मैं इसके बजाय "डिबग" परीक्षण करता हूं, तो डिबग आउटपुट अन्य सभी ट्रेस और कंसोल की तरह ठीक दिखाता है। मुझे नहीं पता कि परीक्षण को "रन" करने पर आउटपुट कैसे देखा जाए।


मैं System.Diagnostics.Debug.WriteLineपरीक्षण डिबगिंग का उपयोग करते हुए दिखाने के लिए कुछ प्राप्त कर सकता हूं , लेकिन आपको Console.WriteLineकाम कैसे करना है ? यह मेरे लिए सामान्य (लाइव अपडेटेड) आउटपुट में समाप्त नहीं होता है।
या मैपर

क्या आपको परीक्षण चलाते समय आउटपुट देखने का कोई तरीका मिला?
हेरा

0

आप बेहतर तरीके से एकल परीक्षण सेटअप करते हैं और इस परीक्षण से एक प्रदर्शन परीक्षण बनाते हैं। इस तरह आप डिफ़ॉल्ट टूल सेट का उपयोग करके प्रगति की निगरानी कर सकते हैं।


"इस तरह आप डिफ़ॉल्ट टूल सेट का उपयोग करके प्रगति की निगरानी कर सकते हैं।" - किस तरह? मुझे जो समस्या दिखाई दे रही है, वह यह है कि एक बार जब कोई परीक्षण चलता है, तो यह एक ब्लैक बॉक्स होता है और मुझे केवल आउटपुट देखने के लिए मिलता है (यह कि मैं धीरे-धीरे लिख रहा हूं जबकि परीक्षण चल रहा है) परीक्षण के समाप्त होने के बाद, आउटपुट विंडो में ।
या मैपर

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.