2016-10-26 11 views
5

Używam pakietów VSCode i Ionide pakietów do tworzenia aplikacji konsolowej w F #. Muszę dodać testy jednostkowe do aplikacji, aby po I ctrl+shift+p FAKE: Build projekcie testy były uruchamiane podczas procesu budowania.Dodawanie testów jednostkowych do projektu F # w VSCode

Jako przykład stworzyłem dummy project in Github.

Początkowo nie było tam katalogu test. Stworzyłem katalog test i do tego folderu utworzyłem drugi projekt TestProj.Test (z perspektywy czasu powinienem użyć bardziej opisowych nazw) do celów testowych. Do tego projektu dodałem plik .fsproj z TestProj, dzięki czemu mógłbym odwołać się do SimpleFunctions.fs. NUnit.Framework i FsUnit są dodawane do TestProj.Test. Test.fs zawiera dwa proste testy.

Celowo utworzyłem TestProj.Test jako F # library, ponieważ czytałem na SO, że projekt testowy musiał być biblioteką, a nie aplikacją konsolową.

Dodałem wiersze 9, 31-37 i 47 do domyślnego build.fsx file that comes from Ionide.. Jednak, kiedy zbudować cały projekt (tj TestProj), kompilacja nie powiedzie się i pojawia się następujący błąd:

1) System.Exception: NUnit: cannot run tests (the assembly list is empty). 
    at Fake.NUnitSequential.NUnit(FSharpFunc`2 setParams, IEnumerable`1 assemblies) in C:\code\fake\src\app\FakeLib\UnitTest\NUnit\Sequential.fs:line 22 
    at [email protected](Unit _arg3) 
    at Fake.TargetHelper.runSingleTarget(TargetTemplate`1 target) in C:\code\fake\src\app\FakeLib\TargetHelper.fs:line 492 

Line 22 of the Sequential.fs sugeruje, że assemblies jest pusty.

Co robię źle? Jak skonfigurować plik build.fsx, aby testy w trybie TestProj.test przebiegły pomyślnie? Alternatywnie, czy jest coś nie tak z plikiem Tests.fs w TestProj.Test? Wydaje się to szczególnie trudne; czy istnieje łatwiejszy sposób włączenia testów, które działają automatycznie z VSCode, Iondide i F#?

+0

Twój cel "Test" szuka "NUnit.Test. *. Dll", podczas gdy "TestProj.Test" tworzy podobną bibliotekę dll. BTW, istnieje kilka innych możliwych ulepszeń w twojej strukturze projektu. Jeśli chcesz, chciałbym podnieść PR przez EOD WEST. – CaringDev

+1

Aby utworzyć pełnoprawny projekt F # zawierający dokumentację, możesz rzucić okiem na [ProjectScaffold] (https://fsprojects.github.io/ProjectScaffold/) – CaringDev

+0

Użyłem wcześniej ProjectScaffold, ale jest tak wiele rzeczy nie potrzebuję ani nie rozumiem. Miałem nadzieję, że tego uniknę, ale będę musiał użyć go, jeśli nie będę w stanie samodzielnie uruchomić ram testowych. Być może jest jeszcze za wcześnie, ale nie rozumiem skrótów "PR", "EOD" i "WEST", ponieważ używasz ich tutaj. Wyjaśnienie proszę? – Steven

Odpowiedz

2

Istnieje kilka problemów w projekcie:

  • próbują testować przed budować zależności "Clean" ==> "Test" ==> "Build" ==> "Deploy"
    => docelowe zmiany "Clean" ==> "Build" ==> "Test" ==> "Deploy"

  • odrębnej konfiguracji paket dla testu (paket.dependencies, paket.zablokować w test podkatalogu), która prowadzi do sprzecznych wersjach referencyjnych zależności
    => usunąć paket.dependencies i paket.lock z test

  • trującą mieszankę wersji NUnit
    => usunięcie wyraźnych odniesień do NUnit.Framework od paket.dependencies i uruchomić paket.exe install

  • nieprawidłowe rozszerzenie typu w projekcie testowym
    => zmień na type Test() lub usuń niepotrzebny plik

  • budynek tworzy wyjście wszystkich projektów (i nie tylko src/app) w ./build ale testy szukać DLL w ./test
    => Zmiany plik testowy wzór do buildDir + "**/*.Test.dll"

  • jeśli chcesz używać NUnit3
    =>open Fake.Testing i używać NUnit3 zamiast NUnit

wreszcie, należy commit paket.bootstrapper.exe

Polecam albo użyć predefiniowanego szablonu, albo zacząć od małego i upewnij się, że rozumiesz każdy krok i sprawdź, czy działa zgodnie z oczekiwaniami. Po przejściu przez punkt niedziałającego rozwiązania niezwykle trudno jest wrócić na właściwe tory.

Powiązane problemy