fbpx

Budowanie projektu i uruchamianie testów z Cake

Opublikowane przez Jerzy Wickowski w dniu

Większość programistycznej pracy polega na automatyzowaniu, zazwyczaj biznesu klienta. Jednak duża część programistycznych zadań również może być robiona samoczynnie. Przykładowo całe podejście Continuous Integration (Ciągła Integracja) polega na automatyzowaniu pracy developerskiej. Dzisiaj opiszę jak skonfigurować proces budowania aplikacji i uruchamianie testów przy pomocy Cake na przykładzie projektu IsTableBusy.

Czym jest Cake

Jest to narzędzie do automatyzacji czynności związanych z budowaniem aplikacji. Takich jak kompilacja kodu, operacje na plikach, uruchamianie testów i tym podobnych. Pozwala na uruchamianie procesu bilda zarówno lokalnie jak i na serwerach CI takich jak VSTS czy TeamCity. Skrypty Cake pisze się przy użyciu języka C#, co jest wielką zaletą dla wszystkich programistów .NET. Jeżeli chcesz wgryźć się głębiej to polecam wycieczkę na stronę Cake Build

Kod

Pobranie pakietów NuGet

Na początek należy pobrać pakiety Nugetowe, bowiem bez nich nie zbuduje się solucja. W tym celu należy wywołać metodę NuGetRestore ze ścieżką do pliku solucji.

Task("Restore-NuGet-Packages")	
   .Does(()=> {
      NuGetRestore("../src/IsTableBusy/IsTableBusy.sln");
});

Zbudowanie solucji

Następnym krokiem jest zbudowanie solucji. Jest to potrzebne, aby stworzyć dllki z których będą uruchamiane testy. Do tego celu jest gotowa metoda MSBuild przyjmująca dwa parametry. Pierwszym z nich jest ścieżka do pliku sln, a drugim ustawienia builda. Ponieważ chcę mieć możliwość zmiany konfiguracji builda w przyszłości to wprowadziłem argument configuration, który może być podmieniamy podczas uruchamiania skryptu.

var configuration = Argument("configuration", "Release");
Task("Build")
   .IsDependentOn("Restore-NuGet-Packages")
   .Does(()=>{
      MSBuild(
         "../src/IsTableBusy/IsTableBusy.sln",
         settings => settings.SetConfiguration(configuration)
      );
   });

Uruchomienie testów

Ostatnim krokiem na dziś jest uruchomienie testów. W tym przypadku są to testy XUnit. Zatem na początek należy powiedzieć Kejkowi, że powinien dociągnąć runner do testów, poprzez dodanie takiej linii na początek pliku:

#tool "nuget:?package=xunit.runner.console&version=2.3.1"

Już nic nie stoi na przeszkodzie, aby z pełną radością odpalić testy. W tym celu już jest pobrana metoda XUnit2, a jej użycie wygląda następująco:

Task("Run-Tests")
    .IsDependentOn("Build")
    .Does(()=>{
        XUnit2("../src/IsTableBusy/**/bin/" + configuration + "/*.Tests.dll");
    });

Zakończenie

Jak widzisz napisanie skryptu budującego i uruchamiającego testy w Cake nie jest skomplikowane. Co prawda powyższy kod wykonuje tylko podstawowe zadania konieczne dla każdej aplikacji. Ich użycie w szerszym kontekście znajdziesz w projekcie IsTableBusy w katalogu Deployment. Z pewnością pojawią się również posty rozwijające ten wątek. Czy używasz Cake lub innego narzędzia do automatyzacji procesów developerskich? Jeżeli tak to jakie i jak, a jeżeli nie to daj znać dlaczego.



Czy to był wartościowy artykuł? Zapisz się, a wyślę Ci dwa ebooki o czystym kodzie oraz będę informował Cię o nowych postach

2 Komentarze

Marcin Bębenek · 2018-01-15 o 07:27

Dobry początek. Największą wartość jaką widzę w Cake to możliwość trzymania kodu w repo wtedy rozwój aplikacji idzie razem z rozwojem kodu CI. Przed Cake jeszcze długa droga do stania się prawdziwym narzędziem CI/CD.

    Jerzy Wickowski · 2018-01-24 o 08:58

    @Marcin: Owszem, nie jest to jeszcze bardzo dojrzałe narzędzie, ale już całkiem przyjemnie działa. Najgorsze jest to, że nie wiadomo co tak naprawdę przyniesie przyszłość i czy jakiegoś dnia nie przestanie być wspierany. Jednakże póki co perspektywę ma ładną.

Dodaj komentarz

Twój adres email nie zostanie opublikowany.

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

[contact-form-7 404 "Nie znaleziono"]

Zapisz się

Wyślę Ci dwa dokumenty mówiące o jakości kodu. Dodatkowo będę Cię informował o nowych postach i nowościach.