Normalmente scrivo il mio test di unità in F # comeCome per acquisire l'output con xUnit 2.0 e prove di stile FSharp
open Swensen.Unquote
open Xunit
module MyTests =
[<Fact>]
let ``SomeFunction should return 10``() =
let a = SomeFunction()
test <@ a = 10 @>
[<Fact>]
let ``SomeOtherFunction should return 11``() =
let a = SomeFunction()
test <@ a = 11 @>
Se voglio accedere alla console da xUnit (secondo http://xunit.github.io/docs/capturing-output.html) si ha la necessità di scrivere un costruttore che prende un ITestOutputHelper e quindi usa quello al posto di Console.WriteLine e famiglia.
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);
}
}
tuttavia i moduli fsharp sono classi statiche ei test sono metodi statici. Non c'è costruttore per iniettare l'helper di output.
C'è un modo per accedere all'assistente di output corrente per il test corrente. So che potrei riscrivere i miei test di fsharp come classi non statiche, ma questo è indesiderato.
Dopo aver esaminato la fonte XUnit.
Sono abbastanza sicuro che questo è un caso trascurato. Non c'è iniezione dell'helper in classi statiche.
Potrebbe questo lavoro per voi, invece? http://stackoverflow.com/a/2139303/126014 Non si scrive sulla motivazione per voler catturare l'output, quindi potrebbe non essere applicabile, ma ho pensato che volevo indicare quell'opzione, per ogni evenienza. –