2017-01-31 2 views
4

Я пытаюсь создать проект тестирования единицы F #, который работает в ядре .net.Есть ли способ модульного тестирования проектов F # в ядре .net?

dotnet new -t xunittest 

создаст проект тестирования xunit для C#, но такой эквивалент не существует для F #.

Я пробовал модифицировать project.json и тестовый файл, который выводится из C# «dotnet new», показанного выше, и добавлять бит, которые, как я думал, понадобится для его запуска с помощью F #. Это не сработало. Он строит и даже «запускает» тест после ввода «теста dotnet», но тест ВСЕГДА проходит, даже если он не должен.

Я пропустил что-то с настройкой, или есть другая (возможно, совершенно другая) опция, которую я могу преследовать, чтобы создать тестовый проект 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. 

ответ

4

Ваш тест не является функцией, а значением. Составлено в IL как собственность или поле (в зависимости от причин). xUnit ищет методы для выполнения, он пропускает свойства и поля (и это правильно: как бы это выполнить?)

Почему это не функция? Потому что у него нет параметра. Это вещь F #: если у вас есть параметры, вы - функция. В противном случае - значение.

Просто укажите параметр, он станет функцией. У вас нет каких-либо значимых параметров для добавления? Добавьте unit один - тогда он будет скомпилирован в IL как безпараметрический статический метод.

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