F# 如何使用XUnit 2.0和FSharp样式测试捕获输出

F# 如何使用XUnit 2.0和FSharp样式测试捕获输出,f#,xunit,F#,Xunit,通常我用F#as编写单元测试 然而,fsharp模块是静态类,测试是静态方法。没有用于注入输出帮助器的构造函数 是否有方法访问当前测试的当前输出帮助器。我知道我可以将fsharp测试重写为非静态类,但这是不希望的 在查看了XUnit源代码之后 我敢肯定这是一个被忽视的案例。没有将helper注入到静态类中 如果xUnit没有任何其他注入参数的机制,那么我想唯一的选择就是将测试定义为F#对象类型中的方法。我还喜欢使用let将测试编写为函数,但以下简单对象类型看起来并不太糟糕: open Swen

通常我用F#as编写单元测试

然而,fsharp模块是静态类,测试是静态方法。没有用于注入输出帮助器的构造函数

是否有方法访问当前测试的当前输出帮助器。我知道我可以将fsharp测试重写为非静态类,但这是不希望的

在查看了XUnit源代码之后


我敢肯定这是一个被忽视的案例。没有将helper注入到静态类中

如果xUnit没有任何其他注入参数的机制,那么我想唯一的选择就是将测试定义为F#对象类型中的方法。我还喜欢使用
let
将测试编写为函数,但以下简单对象类型看起来并不太糟糕:

open Swensen.Unquote
open Xunit
open Xunit.Abstractions

type MyTests(output:ITestOutputHelper) =

    [<Fact>]
    member __.``SomeFunction should return 10`` () =
        let a = SomeFunction()
        output.WriteLine("Some function returned {0}", a)
        test <@ a = 10 @>
openswensen.Unquote
开放式Xunit
OpenXUnit.Abstractions
类型MyTests(输出:ITestOutputHelper)=
[]
成员``SomeFunction应返回10``()=
设a=SomeFunction()
WriteLine(“某个函数返回了{0}”,a)
试验
如果xUnit为此支持其他选项,那就太好了——我怀疑他们可能会接受建议,如果这样做不会太尴尬的话(可能使用方法参数?)


但是,除非xUnit增加了对其他方法的支持,否则我认为您将需要在方法中使用F#object。

这对您有用吗?你没有写下想要捕获输出的动机,所以它可能不适用,但我想我想指出这个选项,以防万一。@TomasPetricek,一如既往,你救了我一天:)非常感谢!这似乎不适用于
FsCheck
[]
我仍然没有在VS代码中获得任何输出。
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);
    }
}
open Swensen.Unquote
open Xunit
open Xunit.Abstractions

type MyTests(output:ITestOutputHelper) =

    [<Fact>]
    member __.``SomeFunction should return 10`` () =
        let a = SomeFunction()
        output.WriteLine("Some function returned {0}", a)
        test <@ a = 10 @>