加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux中的F#单元测试项目单声道(FAKE,NUnit 3)

发布时间:2020-12-14 01:07:11 所属栏目:Linux 来源:网络整理
导读:我试图在 linux中使用mono设置一个非常简单的测试F#项目,使用 Forge设置项目并安装nuget包. Forge创建一个使用FAKE的build.fsx文件.我试图从本教程 http://fsharp.github.io/FAKE/gettingstarted.html中获得灵感来调整这个构建文件(为了添加测试).然而,该教
我试图在 linux中使用mono设置一个非常简单的测试F#项目,使用 Forge设置项目并安装nuget包. Forge创建一个使用FAKE的build.fsx文件.我试图从本教程 http://fsharp.github.io/FAKE/gettingstarted.html中获得灵感来调整这个构建文件(为了添加测试).然而,该教程使用C#进行测试,并假定Windows为.Net作为环境.我想用F#进行测试,用linux作为环境.

我想我几乎让它工作了,但我从NUnit得到一些神秘的错误信息.运行build.fsx文件时,我得到以下错误:

...
Invalid argument: -nologo
The value '/home/michel/Documents/FSHARP/UnitTests/test/NUnit.Test.MyTests.dll' is not valid for option '--labels'.
Invalid argument: -xml:./test/TestResults.xml
Running build failed.
Error:
NUnit test failed (255).

---------------------------------------------------------------------
Build Time Report
---------------------------------------------------------------------
Target      Duration
------      --------
Clean       00:00:00.0036366
Build       00:00:00.0402828
BuildTest   00:00:00.4911710
Total:      00:00:00.7494956
Status:     Failure
---------------------------------------------------------------------
  1) Fake.UnitTestCommon+FailedTestsException: NUnit test failed (255).
  at Fake.NUnitSequential.NUnit (Microsoft.FSharp.Core.FSharpFunc`2 setParams,IEnumerable`1 assemblies) <0x41d27e50 + 0x0039f> in <filename unknown>:0 
  at FSI_0001+clo@32-4.Invoke (Microsoft.FSharp.Core.Unit _arg4) <0x41d27dc0 + 0x0006f> in <filename unknown>:0 
  at Fake.TargetHelper+targetFromTemplate@195[a].Invoke (Microsoft.FSharp.Core.Unit unitVar0) <0x41cd59b0 + 0x00023> in <filename unknown>:0 
  at Fake.TargetHelper.runSingleTarget (Fake.TargetTemplate`1 target) <0x41ccb490 + 0x000ca> in <filename unknown>:0

我的build.fsx文件看起来像这样

// include Fake libs
#r "./packages/FAKE/tools/FakeLib.dll"

open Fake


// Directories
let buildDir  = "./build/"
let testDir = "./test/"

// version info
let version = "0.1"  // or retrieve from CI server

// Targets
Target "Clean" (fun _ ->
    CleanDirs [buildDir; testDir]
)

Target "Build" (fun _ ->
    //MSBuildDebug buildDir "Build" appReferences
    !! "/UnitTesting/*.fsproj"
    |> MSBuildRelease buildDir "Build"
    |> Log "AppBuild-Output: "
)

Target "BuildTest" (fun _ ->
                    !! "src/NUnit.Test.MyTests/*.fsproj"
                    |> MSBuildDebug testDir "Build"
                    |> Log "TestBuild-Output: "
)

Target "Test" (fun _ ->
               !! (testDir + "/NUnit.Test.MyTests.dll")
               |> NUnit (fun p ->
                         { p with
                               ToolPath = "packages/NUnit.ConsoleRunner/tools"
                               //DisableShadowCopy = true;
                               OutputFile = testDir + "TestResults.xml" })
)

Target "Default" (fun _ -> trace "HEEEELLOOOOOO world from FAKE!!!")

"Clean" ==> "Build" ==> "BuildTest" ==> "Test" ==> "Default"

RunTargetOrDefault "Default"

FAKE似乎正在寻找/ NUnit.ConsoleRunner / tools目录下的文件nunit-console.exe,但是没有这样的文件.但是,有一个nunit3-console.exe文件,所以我只是使用名称nunit-console.exe制作了这个文件的副本.

我的简单测试文件NUnit.Test.MyTests.fs如下所示:

namespace NUnit.Test.MyTests

module testmodule =

    open NUnit.Framework

    let SayHello name = "Hello"

    [<TestFixture>]
    type myFixture() =

        [<Test>]
        member self.myTest() =
            Assert.AreEqual("Hello World!",SayHello "World")

并且文件test / NUnit.Test.MyTests.dll似乎生成得很好.

隐秘的错误消息是什么意思,我该如何修复它以便我可以运行我的测试?

解决方法

正如评论中的rmunn所提到的,我需要使用函数NUnit3,因为我使用的是NUnit版本3.4.1.该函数驻留在FAKE.Testing模块 http://fsharp.github.io/FAKE/apidocs/fake-testing-nunit3.html中.我修改了我的build.fsx文件,现在看起来如下所示:

// include Fake libs
#r "./packages/FAKE/tools/FakeLib.dll"

open Fake
open Fake.Testing // NUnit3 is in here


// Directories
let buildDir  = "./build/"
let testDir = "./test/"

// version info
let version = "0.1"  // or retrieve from CI server
// Targets
Target "Clean" (fun _ ->
    CleanDirs [buildDir; testDir]
)

Target "Build" (fun _ ->
    !! "/UnitTesting/*.fsproj"
    |> MSBuildRelease buildDir "Build"
    |> Log "AppBuild-Output: "
)

Target "BuildTest" (fun _ ->
                    !! "src/NUnit.Test.MyTests/*.fsproj"
                    |> MSBuildDebug testDir "Build"
                    |> Log "TestBuild-Output: "
)

Target "Test" (fun _ ->
               !! (testDir + "/NUnit.Test.*.dll")
               |> NUnit3 (fun p ->
                         { p with
                               ToolPath = "packages/NUnit.ConsoleRunner/tools/nunit3-console.exe" })
)


Target "Default" (fun _ -> trace "HEEEELLOOOOOO world from FAKE!!!")

"Clean" ==> "Build" ==> "BuildTest" ==> "Test" ==> "Default"

RunTargetOrDefault "Default"

请注意,您必须一直指定ToolPath到nunit3-console.exe文件,而不仅仅是它所在的目录.

现在一切似乎都有效,当我运行build.fsx时,我在控制台输出中得到了一个简单的“测试摘要”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读