2016-09-27 25 views
5

Tôi đang cố gắng thiết lập một dự án F # thử nghiệm đơn giản trong linux với mono, sử dụng Forge để thiết lập dự án và cài đặt gói nuget. Forge tạo tệp build.fsx sử dụng FAKE. Tôi đã cố gắng điều chỉnh tệp xây dựng này (để thêm thử nghiệm) với nguồn cảm hứng từ hướng dẫn này http://fsharp.github.io/FAKE/gettingstarted.html. Tuy nhiên, hướng dẫn này đang sử dụng C# để thử nghiệm và giả định Windows có .Net là môi trường. Tôi muốn sử dụng F # để thử nghiệm và linux với mono là môi trường.Các dự án thử nghiệm đơn vị F # trong linux với mono (FAKE, NUnit 3)

Tôi nghĩ rằng tôi gần như đã làm việc, nhưng tôi nhận được một số thông báo lỗi khó hiểu từ NUnit. Khi chạy file build.fsx tôi nhận được lỗi sau ở cuối:

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

tập tin build.fsx tôi trông như thế

// 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" 

GIẢ này dường như được tìm kiếm một tập tin nunit-console.exe dưới thư mục packages/NUnit.ConsoleRunner/tools, nhưng có không có tập tin. Tuy nhiên, có một tệp nunit3-console.exe, vì vậy tôi vừa tạo một bản sao của tệp này với tên nunit-console.exe.

đơn giản tập tin thử nghiệm của tôi NUnit.Test.MyTests.fs trông giống như sau:

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") 

và file test/NUnit.Test.MyTests.dll dường như được tạo ra tốt.

Thông báo lỗi khó hiểu có nghĩa là gì và làm cách nào để khắc phục sự cố để tôi có thể chạy thử nghiệm của mình?

+4

FAKE có chức năng 'NUnit3' cũng như chức năng' NUnit'. NUnit thay đổi khá nhiều giữa 2 và 3, và bạn không thể chỉ sao chép 'nunit3-console.exe' và đổi tên nó và mong đợi mọi thứ hoạt động. Hãy thử sử dụng chức năng 'NUnit3' của FAKE và bạn sẽ nhận được kết quả tốt hơn. – rmunn

Trả lời

7

Như đã đề cập trong rmunn trong nhận xét, tôi cần sử dụng hàm NUnit3 vì tôi đang sử dụng phiên bản NUnit 3.4.1. Hàm nằm trong mô-đun FAKE.Testinghttp://fsharp.github.io/FAKE/apidocs/fake-testing-nunit3.html. Tôi sửa đổi tập tin build.fsx của tôi vì vậy nó bây giờ trông giống như sau:

// 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" 

Lưu ý rằng bạn phải xác định ToolPath tất cả các cách để các tập tin nunit3-console.exe, và không chỉ là thư mục nơi nó cư trú.

Bây giờ mọi thứ dường như hoạt động và tôi nhận được 'tóm tắt kiểm tra' tốt và đơn giản trong đầu ra bàn điều khiển khi chạy build.fsx. :)

Các vấn đề liên quan