Daniel Rusnok

Vývojářský blog Daniela Rusnoka

Podle kategorie

NÁZVY A STRUKTURY UNIT TESTŮ

Daniel Rusnok       08.07.2019             7056 zobrazení

V tomto článku se dozvíte, jak správně své unit testy pojmenovávat, strukturovat a kde je ve svém projektu udržovat.

POJMENOVÁNÍ TESTŮ

Setkal jsem se s dvěma druhy pojmenovávání testů, které aktivně využívám ve své sadě testů.

GIVENPARAMETERS_WHATTOEXPECT

Pojmenování říká, co do testu vstupuje a co od něj očekávám. Tento název nejvíce využívám pro testování statických metod, které slouží pro kalkulace či jiná zpracovávání primitivních typů. Tyhle názvy si dovolím použít jenom ve třídě s testy, která ve svém názvu obsahuje název SUTu

[Fact]

public void GivenAllParameters_ExpectingResult(){}



[Fact]

public void NotGivenPrice_ExpectingZeroResult(){}

SUT_STATEOFSUT_WHATTOEXPECT

Druhý typ používám častěji, jelikož se jedná o častější případ, kdy chci v názvu testu vyjádřit stav unity, kterou testuji. Druhý typ v sobě obsahuje i název pro System Under Test (SUT). SUT je zkratka pro Unit, kterou daný test testuje. Také se tomu říká Unit Of Work, ale takový název je matoucí, protože je využíván i jinde. Jako UOW vývojáři nejčastěji pochopí Pattern, který využíváme při práci s databázovým Contextem. Proto bych se držel názvu SUT. Jako SUT si můžeme představit jednu metodu, ale také i celý systém metod, který reprezentuje jeden Bussiness Behavior (Process).

[Fact]

public void Order_NotChosenPayment_ShouldShowValidationMessage(){}


POJMENOVÁNÍ TŘÍDY S TESTY

Třídu s testy doporučím pojmenovat jako [ClassUnderTest]Tests.cs nebo [SUT]Tests.cs. Zde velmi záleží na Vaší architektuře bussiness vrstvy. Pokud podobně jako já máte jednu třídu s jednou public metodou, která zpracovává jeden Bussiness Behavior, tak se můžete řídit pojmenováním pomocí názvu takové třídy a pouhým doplněním sufixu “Tests”.


STRUKTURA TESTU

Unit test můžeme rozdělit na tři části.

  1. 1. Arrange - V tomto bloku připravíte vše potřebné ke spuštění vašeho testu. To znamená vytvoření instancí, proměnných či mocků, které využijete v následném testu.
  2. 2. Act – V bloku act spouštíme SUT. V 99% se bude jednat o volání metody, kterou chcete otestovat.
  3. 3. Assert – Assert obsahuje vyhodnocení testu. V této části použijete metody statické třídy Assert, verifikaci mocků aj.

Doporučil bych v každém testu udržovat tyto tři části oddělené od sebe komentářem, viz pseudotest níže.

public void Sut_StateOfSut_WhatToExpect(){
    //Arrange
    var order = new Order();
    order.Payment = null;
    
    var sut = new OrderProcessor();

    //Act
    var validationMessage = sut.ProcessOrder(order);

    //Assert
    Assert.Equals(validationMessage, "Vyberte platbu");
}


KDE TESTY UKLÁDAT A UDRŽOVAT?

Testy vašeho projektu by měly být naprosto separované od vašeho produkčního kódu. Kód unit testů nesmí nijak ovlivnit běh vaší aplikace. Proto bych doporučil vytvoření úplně nového projektu do vaší solutiony. Projekt s testy bude obsahovat pouze reference na projekty, které si přejete testovat.


ZÁVĚR

Nepodceňujte pojmenování testu. Dobrý název může říct k čemu test slouží a mnohem rychleji napoví, kde jste nejspíše udělali chybu.

 

hodnocení článku

0       Hodnotit mohou jen registrované uživatelé.

 

Nový příspěvek

 

Příspěvky zaslané pod tento článek se neobjeví hned, ale až po schválení administrátorem.

                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

Příspěvky zaslané pod tento článek se neobjeví hned, ale až po schválení administrátorem.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback