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 ) - 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'. - Setup kan laves igennem klassens **constructor**. - For at indikere overfor xUnit framework at en metode er en testmetode, markeres denne metode med en **[Fact]** attribut som vist nedenstående. - 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å) ==== * [[:unit_testing:asserts|Assert overblik]] ---- ==== 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 ==== - [[:xunit_og_vs|xUnit & Visual Studio]] ---- ==== Slides ==== ---- ==== Test dig selv ==== ----