unit-testing - 有没有办法在 .net core 中对 F# 项目进行单元测试?

标签 unit-testing f# .net-core

我正在尝试创建一个在 .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"
      ]
    }
  }
}

测试文件
module Tests

open Xunit

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

dotnet 测试的输出
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.

最佳答案

您的测试不是一个函数,而是一个值。编译为 IL 作为属性或字段(取决于原因)。 xUnit 寻找要执行的方法,它会跳过属性和字段(这是正确的:它将如何执行它们?)

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

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

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

关于unit-testing - 有没有办法在 .net core 中对 F# 项目进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41968229/

相关文章:

c# - .NET Core 中的 String.Intern 方法在哪里?

Angular5 TestBed useValue 似乎没有注入(inject)相同的对象实例

unit-testing - Apache Camel Mock ProducerTemplate 端点

F# -> Seq to Map

wpf - F#/WPF 事件绑定(bind)

asp.net - 混合 ASP.Net 和 .Net Standard 2.0 项目的发布版本构建时出现 SGEN 错误解决方案

php - mock __call() 有不同的签名

unit-testing - 如何对回调函数进行单元测试? (C++ boost 单元测试)

scala - 为什么这样的操作符定义在 Scala 中是可能的?

.net-core - 发布具有大量二进制依赖项的 Azure Functions