F#搭配xUnit如何在Visual Studio测试资源管理器成功用例打印输出
问题背景
正在测试一款通过网络向数据库请求数据的客户端应用程序。此前查阅过Stack Overflow上的同类问题,但相关方案发布时间较早,彼时Hedgehog、Swensen.Unquote这类优质NuGet包尚未推出(本人为单元测试领域新手)。
核心需求:
- 找到无需创建F#类对象的实现方式,让xUnit可以向Visual Studio测试资源管理器打印输出
- 打印输出的操作不能将测试强制标记为错误状态
现存问题:当前使用的代码仅在测试处于错误状态时,才会打印服务端返回的就诊记录数据,无法在测试通过的正常状态下输出返回值。
初始实现代码
module Tests open Xunit open Hedgehog open Swensen.Unquote open System open Stargate.XI.Client [<Fact>] let ``Get Visits`` () = let visits = Scheduling.getVisits (new DateTime(2022,04,22)) test <@ printfn "%O" visits = () @>
实现方案
直接在测试函数的签名中加入xUnit提供的ITestOutputHelper类型参数,xUnit会自动完成依赖注入,无需手动创建类或实例化该对象,调用其WriteLine方法即可输出内容到测试资源管理器,且不会将测试标记为失败。
修改后可正常运行的代码如下:
[<Fact>] let ``Get Visits`` (output: Xunit.Abstractions.ITestOutputHelper) = let visits = Scheduling.getVisits (new DateTime(2022,04,22)) output.WriteLine(sprintf "%A" visits) Assert.True(true)
提示:使用
sprintf "%A"可以格式化打印F#中的记录类型、联合类型等特殊结构,比%O的默认ToString输出可读性更好。
内容的提问来源于stack exchange,提问作者Alan Wayne
相关产品推荐
相关产品推荐

