HTX Frederikshavn & Hjørring

Det har aldrig været sjovere at være nørd

Brugerværktøjer

Webstedsværktøjer


prog:forloeb:unit_testing

banner

Unit testing

Unit testing fokuserer på at teste små, isolerede dele af koden, typisk individuelle funktioner eller metoder. Formålet er at sikre, at hver enhed fungerer korrekt, inden den integreres med resten af programmet.

Unit tests er automatiserbare, hvilket gør det lettere at genkøre dem, når kode ændres.

At mestre unit testing giver dig mulighed for at skrive mere robust og vedligeholdelsesvenlig kode, fordi fejl opdages tidligt, og du kan arbejde med tillid til, at ændringer ikke bryder eksisterende funktionalitet.


Teori

Unit tests

Introduktion

  • Vigtigt koncept inden for softwareudvikling: Unit Tests.

Hvad er Unit Tests?

  • Definition: Små, automatiserede test, der kontrollerer individuelle enheder af din kode.
  • Enheder: Funktioner, metoder eller hele klasser.

Hvorfor bruge Unit Tests?

  • Forebygger fejl: Opdager fejl tidligt i udviklingsprocessen.
  • Gør koden mere robust: Sikrer, at eksisterende funktionalitet ikke er brudt.
  • Letter vedligeholdelse: Fungerer som dokumentation.
  • Automatiseret.. („gratis“ tidsmæssigt, at udføre)

Sådan skriver du en Unit Test

  • Vælg en enhed: Identificer den mindste del af din kode, der skal testes.
  • Skriv en test: Opret en test, der validerer, om den valgte enhed opfører sig som forventet.
  • Kør testen: Brug et testframework som NUnit eller xUnit.
  • Analyser resultaterne: Se på resultaterne for at evaluere testens gyldighed.

Eksempel på en Unit Test (C# med xUnit)

I dette lille eksemple vil vi starte med at unit teste en regnemaskine. ( Calculator class )

  1. En samling/gruppe af tests kaldes en 'TestSuite'. Vi giver derfor vores testklasser et beskrivende navn over hvad de klassen tester, som ender på TestSuite. f.eks. 'CalculatorTestSuite'.
  2. Setup kan laves igennem klassens constructor.
  3. For at indikere overfor xUnit framework at en metode er en testmetode, markeres denne metode med en [Fact] attribut som vist nedenstående.
  4. Teardown. Når objekter destrueres kaldes metoden 'Dispose' implicit. Hvis vi vælger implementere 'IDispose' interfaces kan vi implementere vores teardown i 'Dispose' metoden.

Assert (Hævde/Påstå)

Testen

Single test, uden argumenter:
 
public class CalculatorTestSuite {
 
   [Fact]
   public void TestAdd() {
      int result = calculator.Add(2, 3);  // Exercise
      Assert.AreEqual(5, result);         // Verify
   }
}

Med metode parametre, og inline data.

public class CalculatorTestSuite {
 
   [Theory]
   [InlineData(1, 1, 1)]
   [InlineData(2, 2, 4)]
   [InlineData(3, 3, 9)]
   [InlineData(2, 0, 0)]
   public void Multiply_multiple(int a, int b, int expected) {
      // Arrange
      Calculator calc = new Calculator();
 
      // Act, and Assert
      Assert.Equal(expected, calc.Multiply(a, b));
   }
}

Tilknytning : Produktionskode til SUT

This is kinda important!!:

  • Du skal sikre både produktionskoden og testkoden anvender __samme .net version. (fx. .net8)
  • Check ved at se properties på begge projekter (kode og test)

This is also kinda important:

  • Højreklik på din solution
    • Add → Existng project (find projekt) → klick (hårdt)
  • Højreklik på test-projekt
    • Add project references
    • Find dit projekt (produktionskoden), og 'marker' ved flueben. → klick OK (hårdt)
  • I din test suite, skal du nu anvende 'using' på det namespace i SUT du vil arbejde med.

Kørsel af test

  • Jeg har skrevet min test, hvad nu ?
  • hvordan kører jeg test ?
    • CTRL-R, T (ctrl-r efterfulgt af t)
  • hvordan ser jeg resultatet ?
    • CTRL-E, T viser test explorer

Øvelser

Slides


Test dig selv


prog/forloeb/unit_testing.txt · Sidst ændret: af 127.0.0.1