【问题标题】:How to print in NUnit with F#?如何使用 F# 在 NUnit 中打印?
【发布时间】:2020-07-17 13:39:40
【问题描述】:

我尝试使用 F# 中的 NUnit 测试框架打印一些东西。当我运行下面的代码时它不起作用。有什么问题?

如果重要的话,我会在 Mac 上使用 Visual Studio。

module firsttry_test

open NUnit.Framework

[<SetUp>]
let Setup() = ()

[<Test>]
let Test1() = Assert.Pass()

let __a= printf ("Hello Test here!");;

【问题讨论】:

  • 你试过TestContext.Out.WriteLine("Hello Test here!");吗?您确定控制台输出中没有打印任何内容吗?您使用的是哪个版本的 NUnit?

标签: visual-studio unit-testing f#


【解决方案1】:

您的代码存在一些问题:

  • SetUp 只能用于类类型
  • 将您的代码放入一个模块中,或一个具有默认构造函数的类中(如果您想使用 SetUp)
  • let __a 是全局的,而不是函数(没有括号),因此只有在模块中的某些内容被访问时才会执行。把它放在测试函数里面,去掉let

可以使用模块级别的 let 绑定进行测试,只有当您想使用 SetUp 时才需要将它放在一个类中。

以下是好的:

module MyTests =
    [<Test>]
    let Test1() = 
        printf ("Hello Test here!")
        Assert.Pass()

请注意,这取决于您将在哪里看到控制台输出的测试运行器。例如,在 VS 中,测试输出窗口中会显示一个链接,如果单击它,您会看到额外的输出。在 NCrunch 中,您将直接在结果面板中看到它。其他跑步者的行为可能会有所不同。

一些运行程序仅在测试失败时显示它,在这种情况下,您必须访问原始输出日志(Microsoft 使用的 Azure CI 作业的行为类似于此)。

【讨论】:

    【解决方案2】:

    您可能需要将代码放入 Microsoft 官方文档here 中所示的类类型中。

    【讨论】:

      【解决方案3】:

      很遗憾,这不适用于 Visual Studio for Mac。要获得输出,您需要一个失败的测试:

      [<Test>]
      let Test1() = 
      
         printfn "Hello Test here!"
         Assert.Fail()
      

      现在您将在测试结果输出窗口中看到该消息。有的时候是没有开启的,点进去就可以看到了)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多