In generale, è una brutta strada da percorrere per fare affidamento sulla registrazione dei test e. Il pass/fail dovrebbe essere il risultato dei test. E semplicemente non dovrebbero arrivare al punto in cui ci sono abbastanza cose in corso che sarà necessario guardare una traccia.
Il xunit.gui.exe
mostra l'output di console e traccia, xunit.console.exe
no. Se è importante, puoi collegare un TraceListener che reindirizza a un file facendo le appropriate voci di configurazione .NET standard (c 'è un FileWriterTraceListener
che dovresti riuscire ad agganciare se lo fai su Google).
UPDATE: Come discusso in his blog post, Damian Hickey ha un buon esempio di un possibile sostituto - registrazione cablaggio al xUnit 2 ITestOutputHelper
come dimostrato in https://github.com/damianh/CapturingLogOutputWithXunit2AndParallelTests/blob/master/src/Lib.Tests/Tests.cs
UPDATE 2: In alcuni casi, si può aggiungere registrazione e mangimi per l'ITestOutputHelper
senza coinvolgere LogContext
utilizzando un semplice adattatore come segue (ho solo in F #, sorry):
// 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
la differenza w con questo approccio contro l'uso del contesto di log è che il logging al Serilog Logger
globale non viene prelevato.
fonte
2011-08-23 10:13:09
Grazie per la vostra risposta. Stavo usando xunit.console.exe. Sono consapevole che non è una buona soluzione, e non era proprio l'uso previsto. Il motivo per cui avevo bisogno era di eseguire il debug di alcune operazioni sulle stringhe durante la creazione di una nuova classe usando TDD. – kfuglsang
Personalmente, in questo caso, dovrei semplicemente impostare xunit.console.exe come progetto di avvio nel debugger. BTW TeamCity e altri ambienti di esecuzione simili raccolgono il risultato del test mentre stai cercando –
@downvoter Perché? (A proposito di V2, c'è un lavoro programmato per fermare i dati in deglutizione ...) –