मैं यूनिट टेस्ट से आउटपुट कैसे लिख सकता हूं?


113

डिबगिंग करते समय Debug.Write(line)या तो मेरी यूनिट परीक्षणों में कोई भी कॉल या Console.Write(Line)बस समाप्त हो जाती है और आउटपुट कभी प्रिंट नहीं होता है। कक्षाओं के भीतर से इन कार्यों के लिए कॉल मैं काम ठीक उपयोग कर रहा हूँ।

मैं समझता हूं कि इकाई परीक्षण का मतलब स्वचालित होना है, लेकिन मैं अभी भी इकाई परीक्षण से संदेशों का उत्पादन करने में सक्षम होना चाहता हूं।

जवाबों:


128

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...");
        }
    }

"जादू" को MSDN में वर्णित किया गया है "परीक्षण रूपरेखा स्वचालित रूप से संपत्ति सेट करती है, जिसे आप इकाई परीक्षणों में उपयोग कर सकते हैं।"


7
मैंने पाया है (VS2013 के साथ) कि यह केवल कुछ प्रिंट करता है यदि परीक्षण डिबग मोड में चलाया जाता है।
फूसी


मैं देख रहा हूँ कि अगर आपके तार में घुंघराले लटके हुए हैं, तो विधि चल रही है। तो "_testContext.WriteLine (" हैलो ") ;; काम करता है लेकिन "_testContext.WriteLine (" वह {ll} ओ ");" के साथ विफल रहता है "System.FormatException: इनपुट स्ट्रिंग एक सही प्रारूप में नहीं था।"
माइक के

1
TestContext में WriteLine विधि वही पैरामीटर लेता है जो Console.WriteWriteLine लेता है। इसका मतलब है कि स्ट्रिंग एक प्रारूपण स्ट्रिंग है ( डॉक्स . microsoft.com/en-us/dotnet/standard/base-types/… पर प्रलेखित )। एक स्ट्रिंग में शाब्दिक {का उपयोग करने के लिए, आपको इसे दोगुना करने की आवश्यकता है। अपने स्ट्रिंग को प्रिंट करने के लिए WriteLine का उपयोग करें ("वह {{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 में, कोई आइकन नहीं है। इसके बजाय, परीक्षण के परिणाम में एक लिंक होता है जिसे "आउटपुट" कहा जाता है। यदि आप लिंक पर क्लिक करते हैं, तो आप सभी रिटलाइन देखते हैं।
इपोट्टर

16
geez, कि "आउटपुट" लिंक आंतरिक रूप से खोजने के लिए कठिन है। यदि कोई इसे खोजने के लिए संघर्ष कर रहा है, तो यह पाठ एक्सप्लोरर, नीचे अनुभाग में है। जब कोई परीक्षण चुना जाता है, तो यह आपको "बीता हुआ समय: xxx" परिणाम दिखाता है। उसके नीचे "आउटपुट" लिंक है।
केविन

@kevin, वीएस के किस संस्करण में आपने देखा? (मैं आपको "टेक्स्ट एक्सप्लोरर" के बजाय "टेस्ट एक्सप्लोरर" मान रहा हूं।) मुझे VS2013 एक्सप्रेस में आउटपुट लिंक दिखाई नहीं दे रहा है।
माइक सी

1
अगर किसी को आश्चर्य होता है (मेरे जैसा) इनमें से कौन TRX (परीक्षा परिणाम आउटपुट) फ़ाइल में दिखाई देता है, तो यह "Debug.WriteLine" को छोड़कर उपरोक्त सभी है।
बैडर्सपॉट

4
विजुअल स्टूडियो 2017 में यह अभी भी 'आउटपुट' लिंक है।
हांकका

66

Visual Studio 2017 में, आप परीक्षण एक्सप्लोरर से आउटपुट देख सकते हैं।

1) अपने परीक्षण विधि में, Console.WriteLine ("कुछ");

2) परीक्षण चलाएं।

3) टेस्ट एक्सप्लोरर विंडो में, उत्तीर्ण टेस्ट विधि पर क्लिक करें।

4) और "आउटपुट" लिंक पर क्लिक करें।

यहां छवि विवरण दर्ज करें

और "आउटपुट" पर क्लिक करें, आप Console.Writeline () का परिणाम देख सकते हैं। यहां छवि विवरण दर्ज करें


1
अति उत्कृष्ट। विजुअल स्टूडियो / सी # विकसित करने के लिए मेरा आदर्श नहीं है, यह सिर्फ मेरी जरूरत है! इसे पोस्ट करने के लिए आपका धन्यवाद।
मैट 32

10
मैं 2017 संस्करण 15.5.6 बिट ओ का उपयोग कर रहा हूं जो आउटपुट लिंक को नहीं देखता है।
माइक आईटी

1
क्या यह निर्भर करता है कि कौन सा परीक्षण ढांचा उपयोग में है? मैं एक .NET 4.6 परीक्षण परियोजना में xUnit 2.4 का उपयोग कर रहा हूं और कोई "मानक आउटपुट" फलक प्रकट नहीं होता है। आउटपुट से Console.WriteLine"टेस्ट" के तहत आउटपुट फलक में दिखाई नहीं देता है।
15 अक्टूबर को क्वर्टी

XUnit के लिए, जॉन्जिम के जवाब ने मेरे लिए काम किया, यहां तक ​​कि परीक्षण द्वारा अलग धागे में भी।
क्वर्टी

1
उन लोगों के लिए "आउटपुट" लिंक नहीं देखा। 1) आपको एक परीक्षण विधि का चयन करना चाहिए । 2) टेस्ट एक्सप्लोरर विंडो को वीएस विंडो को लंबवत भरें अन्यथा लिंक छिपा हुआ था और स्क्रॉल बार बहुत छोटा है या देखा जा सकता है।
मेव कैट 2012

18

यह आपके परीक्षण धावक पर निर्भर करता है ... उदाहरण के लिए, मैं xUnit का उपयोग कर रहा हूं , इसलिए यदि आप उपयोग कर रहे हैं, तो इन निर्देशों का पालन करें:

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

मुझे लगता है कि यह अभी भी वास्तविक है।

आप इस NuGet पैकेज का उपयोग कर सकते हैं: Bitoxygen.Testing.Pane

इस लाइब्रेरी से कस्टम राइटलाइन विधि को कॉल करें । यह आउटपुट विंडो के अंदर एक परीक्षण फलक बनाता है और वहां हमेशा संदेश डालता है (प्रत्येक परीक्षण के दौरान, यह स्वतंत्र रूप से और TRACE झंडे चलाता है)।

ट्रेसिंग को और आसान बनाने के लिए मैं एक बेस क्लास बनाने की सिफारिश कर सकता हूँ:

[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
जादू यहां है: Output.Testing.Trace.WriteLine (संदेश); BitOxygen के साथ।
बिमल पौडेल

वर्तमान विज़ुअल स्टूडियो संस्करण के साथ काम नहीं करने पर आपको एक त्रुटि मिलती हैCould not load file or assembly 'Microsoft.VisualStudio.Shell.12.0,
कंसोल

@Console हाँ, इसे कुछ समर्थन की आवश्यकता है, लेकिन मुझे यकीन नहीं है कि अगर समुदाय आउटपुट के लिए इस तरह से दिलचस्प है। xUnit में OutputHandler है और VS अपना परिणाम दिखा सकता है।
मैक्सिम

1

प्रयोग करके देखें:

Console.WriteLine()

Debug.WriteLineDEBUG के परिभाषित होने के दौरान ही कॉल किया जाएगा।

अन्य सुझावों का उपयोग करना है: Trace.WriteLineसाथ ही, लेकिन मैंने यह कोशिश नहीं की है।

एक विकल्प भी है (यदि विजुअल स्टूडियो 2008 में यह सुनिश्चित नहीं है), लेकिन आप अभी भी उपयोग कर सकते हैं 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

यह वास्तव में परीक्षण धावक पर निर्भर करता है जैसा @jonzim ने उल्लेख किया है। NUnit 3 के लिए मुझे NUnit.Framework.TestContext.Progress.WriteLine()Visual Studio 2017 के आउटपुट विंडो में रनिंग आउटपुट प्राप्त करने के लिए उपयोग करना था ।

NUnit वर्णन करता है: यहाँ कैसे

मेरी समझ से यह परीक्षण के निष्पादन के परीक्षण के समानांतर समानांतर रूप से घूमता है जो परीक्षण धावकों को मिला है।


0

जब मेरी टेस्ट / टेस्ट सेटिंग्स / डिफॉल्ट प्रोसेसर आर्किटेक्चर सेटिंग और असेंबली कि मेरा टेस्ट प्रोजेक्ट रेफरेंस नहीं होता है तो मुझे कोई आउटपुट नहीं मिलता है। अन्यथा Trace.Writeline () ठीक काम करता है।


0

Console.WriteLine काम नहीं करेगा। डीबग मोड में केवल Debug.WriteLine () या Trace.WriteLine () काम करेगा।

मैं निम्नलिखित कार्य करता हूं: परीक्षण मॉड्यूल में System.Diagnostics का उपयोग करना शामिल है । फिर, मेरे आउटपुट के लिए Debug.WriteLine का उपयोग करें, परीक्षण पर राइट क्लिक करें , डीबग चयनित टेस्ट चुनें । परिणाम आउटपुट अब नीचे आउटपुट विंडो में दिखाई देगा। मैं Visual Studio 2017 बनाम 15.8.1 का उपयोग करता हूं, डिफ़ॉल्ट यूनिट टेस्ट फ्रेमवर्क VS प्रदान करता है।


0

क्या आप सुनिश्चित हैं कि आप डिबग में अपनी इकाई परीक्षण चला रहे हैं? Debug.WriteLine रिलीज बिल्ड में नहीं बुलाया जाएगा।

कोशिश करने के दो विकल्प हैं:

  • Trace.WriteLine (), जो रिलीज में बनाया गया है और साथ ही डिबग भी बनाता है

  • यूनिट टेस्ट के लिए अपनी बिल्ड सेटिंग्स में डिफाइन को अनफाइन करें


0

मैं xUnit का उपयोग कर रहा हूं इसलिए यह वही है जो मैं उपयोग करता हूं:

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

पुनश्च: आप भी उपयोग कर सकते हैं Debugger.Break();, ताकि आप अपना लॉग इन देख सकें out


यह " out" क्या है ?
पीटर मोर्टेनसेन

0

कारण / समाधान का एक अलग प्रकार:

मेरा मुद्दा यह था कि मुझे आउटपुट नहीं मिल रहा था क्योंकि मैं एक अतुल्यकालिक LINQ कॉल से परिणाम को एक अतुल्यकालिक संदर्भ में लूप में कंसोल पर लिख रहा था:

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

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

और इसलिए कंसोल के ऑब्जेक्ट को रनटाइम द्वारा साफ करने से पहले परीक्षण कंसोल को नहीं लिख रहा था (केवल एक परीक्षण चलाने पर)।

इसका परिणाम यह था कि परिणाम को पहले एक सूची में बदला जाए, इसलिए मैं फॉरएच के गैर-अतुल्यकालिक संस्करण का उपयोग कर सकता हूं ():

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

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

0

में वी.एस. 2019

  1. मुख्य VS मेनू बार क्लिक में: View->Test Explorer
  2. Test Explorer -> डीबग में अपनी परीक्षा पद्धति पर राइट-क्लिक करें
  3. additional outputनीचे स्क्रीनशॉट में देखे लिंक पर क्लिक करें ।

यहां छवि विवरण दर्ज करें

आप उपयोग कर सकते हैं:

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

सभी अतिरिक्त आउटपुट विंडो में प्रवेश करेंगे।


-1

Trace.WriteLineआपको सही आउटपुट का चयन करने के लिए काम करना चाहिए ( आउटपुट विंडो में "से आउटपुट दिखाएँ" के साथ लेबल ड्रॉपडाउन )।

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