首页 > 解决方案 > 未发现 F# XUnit 测试

问题描述

控制台运行程序无法发现我的 F# 项目中的测试。该项目的代码可以在这里找到:

https://github.com/valainisgt/FsXunitExample

这是我正在运行的命令(来自 repo 的根目录):

packages\xunit.runner.console.2.3.1\tools\net452\xunit.console.exe Library1\bin\Debug\Library1.dll

结果如下:

xUnit.net Console Runner (64-bit Desktop .NET 4.0.30319.42000)
  Discovering: Library1
  Discovered:  Library1
=== TEST EXECUTION SUMMARY ===
   Library1.dll  Total: 0

这里发生了什么?

标签: f#xunit

解决方案


您的测试是一个,而不是一个函数。值在程序启动时被初始化一次(粗略地说)。另一方面,函数在每次调用时都会执行。

Xunit 要求测试是函数(在 .NET 术语中,“方法”),以便它可以在发现后执行它们。

在 F# 中,函数与值的区别在于参数的存在:如果你有参数,你就是一个函数;如果你有参数,你就是一个函数。否则,你就是一个价值。要使您的测试成为一个函数,只需给它一个unit参数:

[<Fact>]
let trueIsTrue () =
    let actual = returnsTrue ()
    Assert.True(actual)

这样的函数将在 IL 中表示为无参数的静态方法,这是 Xunit 将其识别为测试的方法。


推荐阅读