[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) “출력”링크를 클릭합니다.
답변
테스트 러너에 따라 다릅니다 … 예를 들어, 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’아래에 출력을 볼 수있는 옵션이 있으며 출력 창이 나타납니다.