Ich beobachte ein seltsames Verhalten mit Visual Studio Enterprise 2015 Update 1. Wenn Sie die Protokollierung über .NET Framework TraceSource
innerhalb der Komponententests verwenden, enthält nur der erste Komponententest die Protokollierungsausgabe.Warum werden Nachrichten an die Trace-Quelle gesendet, die bei allen außer dem ersten Komponententest fehlen?
Dies ist der Weg, um das Problem zu reproduzieren:
Ein leeres Unit-Test-Projekt enthält die UnitTest1
Klasse, die wie folgt aussieht:
using System;
using System.Diagnostics;
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class UnitTest1
{
private readonly TraceSource trace = new TraceSource("Demo", SourceLevels.All);
[TestMethod]
public void TestMethod1()
{
this.trace.TraceEvent(TraceEventType.Information, 0, "Test 1 (trace source)");
Console.WriteLine("Test 1 (console)");
}
[TestMethod]
public void TestMethod2()
{
this.trace.TraceEvent(TraceEventType.Information, 0, "Test 2 (trace source)");
Console.WriteLine("Test 2 (console)");
}
}
Die App.config
Datei sieht wie folgt aus:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="Demo" switchValue="Critical, Error, Warning, ActivityTracing, Information, Verbose">
<listeners>
<add name="ConsoleTraceListener" />
<add name="TextFileListener" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="ConsoleTraceListener" type="System.Diagnostics.ConsoleTraceListener" />
<add name="TextFileListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="tests.log" />
</sharedListeners>
</system.diagnostics>
</configuration>
Beim Ausführen der Tests von Visual Studio:
Der Ausgang der ersten Einheit Test ist:
Test Name: TestMethod1 Test Outcome: Passed Result StandardOutput: Demo Information: 0 : Test 1 (trace source) Test 1 (console)
Sowohl die Nachrichten von trace Quelle und der Konsole angezeigt werden.
Der Ausgang der zweiten Einheit Test ist:
Test Name: TestMethod2 Test Outcome: Passed Result StandardOutput: Test 2 (console)
Während die Ausgabe von
Console.WriteLine
gut funktioniert, ist die vonTraceSource.TraceEvent
nicht gezeigt.
die Tests von der Konsole ausgeführt wird durch mstest /testcontainer:UnitTestProject1.dll
Ausführung reproduziert das Problem auch. Die für den ersten Test berichtete stdout
enthält zwei Zeilen; der zweite Test stdout
hat nur eine Zeile.
Warum wird die Protokollierung nicht für alle außer dem ersten Test protokolliert?