我想设置一个非常简单的测试F#项目在Linux与单声道,使用Forge设置项目和安装nuget包。 Forge创建一个使用FAKE的build.fsx
文件。我试图调整这个构建文件(为了添加测试)灵感来自本教程http://fsharp.github.io/FAKE/gettingstarted.html。但是,该教程使用C#进行测试,并假定Windows以.Net作为环境。我想使用F#进行测试,并使用mono作为环境。F#单元测试项目在Linux与单声道(FAKE,NUnit 3)
我想我几乎可以正常工作,但是我收到了一些来自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 [email protected] (Microsoft.FSharp.Core.Unit _arg4) <0x41d27dc0 + 0x0006f> in <filename unknown>:0
at [email protected][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似乎在寻找packages/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
似乎产生就好了。
这个神秘的错误信息是什么意思,我该如何解决这个问题才能运行我的测试?
FAKE具有'NUnit3'函数和'NUnit'函数。 NUnit在2到3之间有很大的变化,你不能只复制'nunit3-console.exe'并重新命名它,并期望事情能够发挥作用。尝试使用FAKE的'NUnit3'函数,你应该得到更好的结果。 – rmunn