Ogólnie rzecz biorąc, jest to zła droga do zejścia, aby polegać na rejestrowaniu testów i. Wynik pozytywny/negatywny powinien być wynikiem testów. I po prostu nie powinni wchodzić na scenę, na której jest wystarczająco dużo rzeczy, które będą wymagały patrzenia na ślad.
Na xunit.gui.exe
widać komunikat Konsola i dane śledzenia, xunit.console.exe
. Jeśli jest to ważne, możesz podłączyć TraceListener, który przekierowuje do pliku, tworząc odpowiednie standardowe wpisy .NET config (Theres 'a FileWriterTraceListener
, które powinieneś być w stanie podłączyć, jeśli google to).
UPDATE: Jak omówiono his blog post Damian Hickey ma dobry przykład możliwego substytut - rejestrowanie okablowania do xUnit 2 ITestOutputHelper
jak wykazano w https://github.com/damianh/CapturingLogOutputWithXunit2AndParallelTests/blob/master/src/Lib.Tests/Tests.cs
UPDATE 2: W niektórych przypadkach, można dodać rejestrowanie i karmić go do ITestOutputHelper
bez angażowania LogContext
za pomocą prostego adaptera następująco (i tylko mieć go w F #, przepraszam):
// Requirement: Make SUT depend on Serilog NuGet
// Requirement: Make Tests depend on Serilog.Sinks.Observable
type TestOutputAdapter(testOutput : Xunit.Abstractions.ITestOutputHelper) =
let formatter = Serilog.Formatting.Display.MessageTemplateTextFormatter(
"{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message}{NewLine}{Exception}", null);
let write logEvent =
use writer = new System.IO.StringWriter()
formatter.Format(logEvent, writer);
writer |> string |> testOutput.WriteLine
member __.Subscribe(source: IObservable<Serilog.Events.LogEvent>) =
source.Subscribe write
let createLogger hookObservers =
LoggerConfiguration()
.WriteTo.Observers(Action<_> hookObservers)
.CreateLogger()
let createTestOutputLogger (output: ITestOutputHelper) =
let adapter = TestOutputAdapter testOutputHelper
createLogger (adapter.Subscribe >> ignore)
type Tests(testOutputHelper) =
let log = createTestOutputLogger testOutputHelper
[<Fact>] let feedToSut() =
// TODO pass log to System Under Test either as a ctor arg or a method arg
Różnica w Takie podejście w porównaniu z kontekstem logu polega na tym, że logowanie do globalnego [kontekstualizowanego] Seriloga Logger
nie zostanie odebrane.
Dziękuję za odpowiedź. Używałem xunit.console.exe. Mam świadomość, że to nie jest dobre rozwiązanie, a tak naprawdę nie było to zamierzone użycie. Powodem, dla którego go potrzebowałem, było debugowanie operacji łańcuchowych podczas tworzenia nowej klasy przy użyciu TDD. – kfuglsang
Osobiście ustawiłbym w tym przypadku xunit.console.exe jako projekt startowy w debugerze. BTW TeamCity i inne środowiska działające w podobnym środowisku przechwytują wyniki testów, gdy szukasz –
@downvoter Dlaczego? (Przy okazji w V2 zaplanowano prace mające na celu powstrzymanie połknięcia danych ...) –