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

Posted

技术标签:

【中文标题】有没有办法在.net core 中对 F# 项目进行单元测试?【英文标题】:Is there a way to unit test F# projects in .net core? 【发布时间】:2017-06-17 12:26:16 【问题描述】:

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

dotnet new -t xunittest

将为 C# 创建一个 xunit 测试项目,但对于 F# 不存在这样的等效项目。

我尝试修改从上面显示的 C#“dotnet new”中获取输出的 project.json 和测试文件,并添加我认为需要使其与 F# 一起运行的位。它没有用。它会在输入“dotnet test”后构建甚至“运行”一个测试,但测试总是通过,即使它不应该通过。

我是否在设置中遗漏了某些内容,或者是否有其他(可能完全不同的)选项可以用来创建 F# 测试项目?同样,我特别专注于使其与 .net 核心一起工作。

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

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】:

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

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

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

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

【讨论】:

以上是关于有没有办法在.net core 中对 F# 项目进行单元测试?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 .NET Core 的单元测试中查看生成的日志消息?

如何让 mvc 管道在 .net core 5 中对 oidc 进行身份验证

VS2019没有.net core3.0模板的解决办法

有没有办法在 Asp.Net Core Identity 中将 PasswordHash 的数据类型从字符串更改为字节数组

如何在 .NET Core 项目中使用 F# 的命令行选项?

.NET Core 3.0 Preview 6中对ASP.NET Core和Blazor的更新