[c#] 단위 테스트에서 출력을 작성하려면 어떻게해야합니까?

내 단위 테스트의 모든 호출은 디버깅 중에 건너 뛰 Debug.Write(line)거나 Console.Write(Line)출력이 인쇄되지 않습니다. 내가 사용하는 클래스 내에서 이러한 함수를 호출하면 잘 작동합니다.

단위 테스트가 자동화된다는 것을 이해하지만 여전히 단위 테스트에서 메시지를 출력하고 싶습니다.



답변

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 에서 “테스트 프레임 워크가 자동으로 속성을 설정하므로 단위 테스트에서 사용할 수 있습니다.”라고 설명되어 있습니다.


답변

또한 단위 테스트에서 작동하도록 Debug 또는 Trace 또는 Console 또는 TestContext를 가져 오려고했습니다.

다음 방법 중 어느 것도 출력 창에 작동하거나 출력을 표시하는 것처럼 보이지 않습니다.

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

Visual Studio 2012 이상

(댓글에서) Visual Studio 2012에는 아이콘이 없습니다. 대신 테스트 결과에 Output 이라는 링크가 있습니다. 링크를 클릭하면 모든 WriteLine.

Visual Studio 2012 이전

그런 다음 테스트 결과 창에서 테스트를 실행 한 후 작은 성공 녹색 원 옆에 다른 아이콘이 있음을 알았습니다 . 두 번 클릭했습니다. 그것은 내 테스트 결과였으며 위의 모든 유형의 글쓰기를 포함했습니다.


답변

Visual Studio 2017에서는 테스트 탐색기의 출력을 볼 수 있습니다.

1) 테스트 메서드에서 Console.WriteLine ( “something”);

2) 테스트를 실행합니다.

3) Test Explorer 창에서 Passed Test Method를 클릭합니다.

4) “출력”링크를 클릭합니다.

여기에 이미지 설명 입력

“출력”을 클릭하면 Console.Writeline ()의 결과를 볼 수 있습니다.
여기에 이미지 설명 입력


답변

테스트 러너에 따라 다릅니다 … 예를 들어, 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);
    }
}

출력 창에 쓰기 위해 제공 한 링크에 다른 방법이 나열되어 있지만 이전 방법을 선호합니다.


답변

나는 그것이 여전히 실제라고 생각합니다.

이 NuGet 패키지를 사용할 수 있습니다. Bitoxygen.Testing.Pane

이 라이브러리에서 사용자 지정 WriteLine 메서드를 호출합니다 . 출력 창 안에 테스트 창을 만들고 메시지를 항상 거기에 둡니다 (각 테스트 동안 DEBUG 및 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));
    }
}


답변

다음을 사용해보십시오.

Console.WriteLine()

에 대한 호출 Debug.WriteLine은 DEBUG가 정의 된 동안에 만 이루어집니다.

다른 제안도 사용하는 Trace.WriteLine것이지만 시도해 보지 않았습니다.

옵션도 있지만 (Visual Studio 2008에 있는지 확실하지 않음) IDE에서 옵션으로 Debug.WriteLine테스트를 실행할 때 여전히 사용할 수 있습니다 Test With Debugger.


답변

다음 예제로 해결되었습니다.

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

이 테스트를 실행 한 후 ‘Test Passed’아래에 출력을 볼 수있는 옵션이 있으며 출력 창이 나타납니다.