未发现F#XUnit测试

Gre*_*nis 3 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
Run Code Online (Sandbox Code Playgroud)

以下是结果:

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

这里发生了什么?

Fyo*_*kin 5

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

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

在F#中,函数因参数的存在而与值不同:如果您有参数,那么您就是一个函数; 否则,你是一个价值观.要使测试成为一个函数,只需给它一个unit参数:

[<Fact>]
let trueIsTrue () =
    let actual = returnsTrue ()
    Assert.True(actual)
Run Code Online (Sandbox Code Playgroud)

这样的函数将在IL中表示为无参数静态方法,这是Xunit认可的测试.