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