Blog Dla Młodszych Programistów C#/.NET

Przed ostatni artykuł naszej serii, w której staram się przygotować Cie do rozmowy kwalifikacyjnej na stanowisko młodszego programisty .NET. Dzisiaj przeanalizujemy sobie kolejnych 10 pytań, mam nadzieję, że pytania z poprzednich wpisów już sobie na spokojnie przeanalizowałeś.

100 Pytań (i Odpowiedzi!) z Rozmów Kwalifikacyjnych Dla Młodszych Programistów C#/.NET (Część 9/10)


81) Czym są testy automatyczne i jakie są ich zalety?


Testy automatyczne są to kawałki kodu, które testują inny kod. Takie testy między innymi możemy też pisać w C# z zastosowaniem odpowiedniego frameworka. Możemy tutaj użyć np. NUnit lub xUnit.

Dzięki testom automatycznym możemy testować kod częściej i szybciej.

Wyłapujemy więcej błędów przed wdrożeniem na produkcję.

Dzięki nim również łatwiej jest przeprowadzić refaktoryzację.

Mamy lepszą jakość kodu, łatwiejsze utrzymywanie tego kodu, a także dobre testy również mogą być dokumentacją naszego kodu.

[Test]
public void GetOutput_WhenInputIsDivisibleOnlyBy3_ShouldReturnFizz()
{
    var fizzbuzz = new FizzBuzz();
    var result = fizzbuzz.GetOutput(3);
    Assert.That(result, Is.EqualTo("Fizz"));
}


82) Jakie są rodzaje testów automatycznych?


Przede wszystkim możemy podzielić testy automatyczne na 3 rodzaje testów.

Są to testy jednostkowe. Czyli testowanie kodu bez zewnętrznych zależności (takich jak pliki, baza danych, czy webserwisy). Testy jednostkowe są to małe testy, które testują pojedyncze jednostki. Zazwyczaj takich tekstów pisze się najwięcej, przez to, że nie korzystają z zewnętrznych zależności, są bardzo szybkie.

Oprócz testów jednostkowych piszemy również testy integracyjne. Tutaj testujemy kilka połączonych ze sobą jednostek i już metod z zewnętrznymi zależnościami. Te testy właśnie przez to, że korzystają z zewnętrznych zależności, są wolniejsze od testów jednostkowych. Trzeci rodzaj testów to testy end-to-end, czyli testowanie aplikacji poprzez interfejs użytkownika, np. Selenium. Takie testy E2E są najwolniejsze.

Zgodnie z piramidą testów w aplikacji najwięcej powinno być testów jednostkowych, które są łatwe do napisania i szybkie. Mniej testów integracyjnych, a najmniej testów end-to-end, czyli testów najwolniejszych.


83) Co to jest mockowanie?


Mockowanie, czyli naśladowanie czegoś, jakiegoś zachowania. Są to po prostu sztuczne obiekty, atrapy, które naśladują jakieś zachowania.

Jeżeli metoda, ma w sobie logikę oraz korzysta z zewnętrznych zasobów (takich jak baza danych, plik, webserwisy itp.), to w naszych testach jednostkowych nie dałoby się takiej metody testować. Jeżeli natomiast podstawimy w miejsce zewnętrznego zasobu, jakiś sztuczny obiekt, czyli mock, który nie ma żadnej logiki, to wtedy jak najbardziej możemy to zrobić. Czyli podmieniamy wtedy na potrzeby testów jednostkowych faktyczną implementację na mocka.

W C# mamy do wyboru dużo różnych frameworków do mockowania, między innymi Moq, NSubstitute, FakeItEasy, Rhino Mocks i wiele innych. Jednak najbardziej popularnym jest framework Moq. Ma wszystkie funkcjonalności, które są potrzebne do mockowania obiektów i jest łatwy w użyciu.

var mockUserRepository = new Mock<IUsersRepository>();
mockUserRepository.Setup(x => x.Login("user", "password")).Returns(false);
var authentication = new Authentication(mockUserRepository.Object);


84) Co to jest TDD?


TDD, czyli Test Driven Development, to znaczy tworzenie oprogramowania sterowne testami. Pisząc oprogramowanie, stosując TDD można powiedzieć, że nasze testy sterują kodem, który dopiero będzie tworzony. Jest to technika, która polega na pisaniu najpierw testu, a dopiero później kodu.

Stosując TDD, skupiamy się na kodzie lepszej jakości. Dzięki temu, że najpierw został napisany test, mamy pewność, że kod będzie testowalny, a co za tym idzie, będzie stosował się do dobrych praktyk programowania. Dzięki wymaganej w każdym cyklu refaktoryzacji będziemy mogli na bieżąco go poprawiać. Dzięki TDD, mamy również szersze spojrzenie na kod, zanim przejdziemy do faktycznej implementacji. Skupiamy się na dokładnym zrozumieniu wszystkich wymagań. Dzięki temu jesteśmy, w stanie przewidzieć więcej przypadków testowych, które trzeba sprawdzić.

Podejście TDD składa się z trzech etapów, które nazywa się Red-Green-Refactor.

Implementacje zaczynamy od fazy red, jest to faza, w której piszemy pierwszy test i jego wynik powinien być czerwony, to znaczy test nie powinien przechodzić. Dodatkowo często nawet po tej fazie, kod nie będzie się kompilował, ponieważ możemy używać w teście klas, których jeszcze nie ma.

Drugi etap, czyli green, to implementowanie kodu, do naszego testu. Tutaj trzeba zwrócić uwagę, na to, że implementujemy najprostszy kod, który spełnia wymagania naszego obecnego testu. Po implementacji kodu test powinien być pozytywny, czyli zielony.

Ostatnim etapem jest refaktoryzacja kodu, ewentualnie testów, tak żeby kod dalej pozostał zielony.

Następnie te cykle są powtarzane, w celu implementowania kolejnych funkcji w naszej aplikacji.


85) Czym jest REST API?


Skrót REST, czyli Representational State Transfer jest to styl architektury oprogramowania, która polega na wymianie danych pomiędzy systemami, została stworzona przy pracy nad protokołem HTTP.

REST wykorzystuje między innymi jednorodny interfejs (używamy tylko metod protokołu HTTP: GET, POST, PUT, DELETE), wzorzec klient-serwer, każda interakcja z serwerem musi być bezstanowa, wszystkie zasoby są dostępne za pomocą jednolitych identyfikatorów zasobów (URI). Dzięki tym zasadom aplikacje REST są proste i szybkie.

[HttpPost]
public IActionResult UpdateStudent()
{
    return Ok();
}


86) Czym jest AJAX?


AJAX, czyli Asynchronous JavaScript and XML, to znaczy asynchroniczny javascript i xml. Dzięki AJAXowi użytkownik aplikacji może wysłać asynchroniczny request do serwera bez przeładowywania całego dokumentu. Czyli np. w ASP.NET MVC możemy wywołać jakąś akcję w kontrolerze bez przeładowywania całej strony, bez odświeżania tej strony.

$.ajax({
    type: "GET",
    url: '/Home/Action',
    contentType: "application/json; charset=utf-8",
    datatype: "json",
    success: function (data) {
    },
    error: function () {
    }
});


87) Czym jest CORS?


CORS, czyli Cross-Origin Resource Sharing, jest to mechanizm umożliwiający współdzielenie zasobów pomiędzy serwerami znajdującymi się w różnych domenach. Ten mechanizm jest niezwykle przydatny dla aplikacji typu SPA, gdzie backend i frontend znajdują się na osobnych domenach, albo np. korzystamy z innych dodatkowych usług np. płatności, które również są na innych domenach.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseCors(
        options => options.WithOrigins("http://example.com").AllowAnyMethod()
    );
}


88) Czym jest ViewData, ViewBag i TempData i jakie są różnice?


Dzięki ViewData, ViewBag i TempData możemy w ASP.NET przekazać dane z kontrolera do widoku.

ViewData jest to słownik, do którego wartości odwołujemy się poprzez podanie odpowiedniego klucza. Jako wartość słownika podajemy dowolny typ object. Jeżeli odczytujemy wartość z tego słownika, to również otrzymujemy typ object, także zazwyczaj jeszcze ViewData wymaga od nas rzutowania na inny złożony typ. Jego wartość jest przechowywana tylko w obrębie jednego żądania. Jeżeli nastąpi przekierowanie, to wartość zostanie usunięta.

ViewBag jest taką, ulepszoną wersją ViewData. Jest wrapperem na ViewData, przez co jest trochę wolniejszy. Jest to typ dynamic, dzięki czemu nie musimy za każdym razem rzutować na typ oczekiwany. Podobnie jak ViewData wartość jest przechowywana tylko w obrębie jednego żądania. Jeżeli chcemy przypisać jakiś obiekt do ViewBag, to wystarczy wpisać dowolną nazwę po kropce i zrobić przypisanie, podobnie jak przypisujemy wartości do właściwości obiektów. Również w ten sam sposób możemy odczytać wartość w widoku.

Jeżeli chodzi o TempData, to wartości przypisujemy podobnie jak do ViewData, ponieważ również jest to typ słownikowy. Kluczowa różnica pomiędzy TempData, a ViewData jest taka, że przekierowanie nie powoduje usunięcia wartości TempData. Dane mogą być przekazywana pomiędzy żądaniami. Te dane są zapisywane w sesji.

public class HomeController : Controller
{
    public IActionResult Index()
    {
        ViewData["Age"] = 32;
        ViewBag.Year = 2020;
        TempData["Number"] = 1;
        return View();
    }
}


89) Czym jest Razor?


Razor jest to silnik renderujący HTML, dzięki któremu możemy pisać widoki w ASP.NET MVC. Łączy on ze sobą HTMLa i C#. Widoki w aplikacji ASP.NET MVC są pisane w razorze i mają rozszerzenie cshtml. Cs od csharp + HTML, co nam daje cshtml. Składnia razora jest bardzo intuicyjna, piszemy po prostu kod w HTMLu, a jeżeli chcemy przełączyć się na język C# to używamy znak @.

@using App
@model Student

@{
    ViewBag.Title = "Student";
}

<body>
    <div>
        @foreach (var item in Model.Address)
        {
            <div>@item.City</div>
        }
    </div>
</body>


90) Czym jest i jak działa SignalR?


SignalR to biblioteka open source dla programistów ASP.NET, dzięki której możemy wysyłać dane po stronie serwera do klientów w czasie rzeczywistym. Czyli serwer może wysyłać jakieś asynchroniczne powiadomienia do klientów aplikacji. Biblioteka SingalR przede wszystkim sprawdzi się w aplikacjach, które wymagają częstych aktualizacji z serwera, mogą to być gry, czaty, poczty e-mail, alerty, aplikacje monitorujące, nawigacje, aukcje itp.


ZAKOŃCZENIE


To wszystkie pytania na dzisiaj. Do kolejnych jak zwykle zapraszam Cię w kolejnym materiale. Będzie to już ostatni artykuł z tej serii. Jeżeli taki materiał Ci się spodobał, to koniecznie dołącz do mojej społeczności – darmowe zapisy, gdzie będziesz również miał dostęp do dodatkowych materiałów.

To wszystko na dzisiaj, do zobaczenia w kolejnym artykule.

Poprzedni artykuł - 100 Pytań (i Odpowiedzi!) z Rozmów Kwalifikacyjnych Dla Młodszych Programistów C#/.NET (Część 8/10).
Następny artykuł - 100 Pytań (i Odpowiedzi!) z Rozmów Kwalifikacyjnych Dla Młodszych Programistów C#/.NET (Część 10/10).
Autor artykułu:
Kazimierz Szpin
Kazimierz Szpin
Programista C#/.NET. Specjalizuje się w ASP.NET Core, ASP.NET MVC, ASP.NET Web API, Blazor, WPF oraz Windows Forms.
Autor bloga ModestProgrammer.pl
Dodaj komentarz
© Copyright 2024 modestprogrammer.pl. Wszelkie prawa zastrzeżone. Regulamin. Polityka prywatności. Design by Kazimierz Szpin