2017-01-31 1 views
4

Ich versuche, ein F # Unit-Testprojekt zu erstellen, das in .net-Core ausgeführt wird.Gibt es eine Möglichkeit, F # -Projekte im .net-Core zu testen?

erstellt ein Xunit-Testprojekt für C#, aber kein entsprechendes Äquivalent für F #.

Ich habe versucht, die project.json und Test-Datei, die Ausgabe von der oben gezeigten C# "dotnet new" Ausgabe, und fügen Sie die Bits, die ich dachte, würde benötigt werden, um es mit F # ausführen zu ändern. Es hat nicht funktioniert. Es erstellt einen Test und führt ihn sogar aus, nachdem er "dotnet test" eingegeben hat, aber der Test wird IMMER ausgeführt, auch wenn dies nicht der Fall ist.

Fehle ich etwas mit dem Setup, oder gibt es eine andere (vielleicht völlig andere) Option, die ich verfolgen kann, um ein F # Testprojekt zu erstellen? Auch hier konzentriere ich mich darauf, dass es mit .net core funktioniert.

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 

Ausgabe von 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. 

Antwort

4

Ihre Test ist keine Funktion, sondern ein Wert. Zu IL als Eigenschaft oder Feld kompiliert (abhängig von Gründen). xUnit sucht nach auszuführenden Methoden, es überspringt Eigenschaften und Felder (und das zu Recht: Wie würde es sie ausführen?)

Warum ist es keine Funktion? Weil es keinen Parameter hat. Es ist ein F # -Sache: Wenn Sie Parameter haben, sind Sie eine Funktion. Sonst - Wert.

Geben Sie einfach einen Parameter, es wird eine Funktion. Haben Sie keine sinnvollen Parameter hinzuzufügen? Fügen Sie ein unit eins hinzu - dann wird es zu IL als eine parameterlose statische Methode kompiliert.

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