有没有一种方法在 .net core 中对 F# 项目进行单元测试?

6

我正在尝试创建一个在 .net core 中运行的 F# 单元测试项目。

dotnet new -t xunittest

创建 C# 的 xunit 测试项目,但没有 F# 等效的。

我试图修改从上面展示的 C# 的 "dotnet new" 输出的 project.json 和测试文件,并添加我认为需要使其在 F# 下运行的部分。但它没有起作用。它构建并且甚至在键入 "dotnet test" 后运行了一个测试,但是测试始终通过,即使它不应该通过。

我是否在设置方面遗漏了什么,或者是否有另一个(也许完全不同的)选项可以追求,以创建 F# 测试项目?再次强调,我特别关注让它在 .NET Core 中工作。

project.json

{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable",
    "emitEntryPoint": true,
    "compilerName": "fsc",
    "compile": {
      "includeFiles": [
        "Tests.fs"
      ]
    }
  },
  "dependencies": {
    "System.Runtime.Serialization.Primitives": "4.3.0",
    "xunit": "2.1.0",
    "dotnet-test-xunit": "1.0.0-*"
  },
  "tools": {
    "dotnet-compile-fsc": "1.0.0-preview2.1-*"
  },
  "testRunner": "xunit",
  "frameworks": {
    "netcoreapp1.1": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.1.0"
        },
        "Microsoft.FSharp.Core.netcore": "1.0.0-alpha-160629"
      },
      "imports": [
        "dotnet5.4",
        "portable-net451+win8"
      ]
    }
  }
}

Tests.fs

module Tests

open Xunit

    [<Fact>]
    let ``Should Fail`` =        
        Assert.False true 

从 dotnet test 输出的结果

xUnit.net .NET CLI test runner (64-bit .NET Core win10-x64)
  Discovering: FSTests
  Discovered:  FSTests
=== TEST EXECUTION SUMMARY ===
   FSTests.dll  Total: 0
SUMMARY: Total: 1 targets, Passed: 1, Failed: 0.
1个回答

5

你的测试不是一个函数,而是一个值。它会被编译成一个属性或字段(具体取决于原因)。xUnit寻找要执行的方法,跳过属性和字段(这样做很正确:它们怎么能被执行呢?)

为什么它不是一个函数?因为它没有参数。这是F#的特点:如果有参数,则它是一个函数。否则-是值。

只需给它添加一个参数,它就会变成一个函数。没有任何有意义的参数可以添加吗? 添加一个unit参数-然后它将被编译为一个无参静态方法。

[<Fact>]
let ``Should Fail`` () =        
    Assert.False true 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接