Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

praktische vraag over unit testen

Pagina: 1
Acties:
  • 618 views

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10 13:23
Ik ben er via de search e.e.a. gezocht over unit testen, maar ik kan me dit eigenlijk niet in praktische zin voorstellen.

Stel ik heb ene applicatie dat wat NAW gegevens opslaat, zoekt en kan bewerken. Hoe zit dan zo'n unit test eruit ?

  • TaraWij
  • Registratie: December 2007
  • Laatst online: 08-02 18:37
Wikipedia: NAW (gegevens) (Leuke afkorting, wist ik nog niet... Merci)

De unit test moet testen of hij de gegevens goed heeft opgeslagen (je maakt een kopie van een juiste opslag en je gebruikt die om telkens mee vergelijken), of hij de dingen die hij moet vinden vind, of hij de dingen die hij niet moet vinden niet vind, of het bewerken werkt, of het bewerken van dingen die niet bestaan niet werkt.

Verder kan je nog op foute invoer en bijzondere gevallen testen.

---

Het doel hiervan is dat als iemand jouw NAW module gebruikt in zijn project dat hij met een simple unit test kan zien of de huidige versie van jouw code werkt, als jij bijvoorbeeld iets gaat veranderen in het zoeken (meer efficient maken bijvoorbeeld) waardoor die niet meer werkt dan is die versie van jouw NAW module niet bruikbaar en zal hij een oudere versie moeten gebruiken.

Verwijderd

voorbeeld:

///Geeft het hoogste nummer in een integer array
public int HoogsteCijfer(int[] cijfers)
{
if (cijfers.length == 0) throw new ArgumentException("Lege array heeft geen hoogste");
int hoogste = int.MINIMUM;
foreach(int cijfer in cijfers)
{
if (cijfer > hoogste) hoogste = cijfer;
}
return hoogste;
}


tests:

[Test]
public void TestStandard()
{
Assert.AreEqual(HoogsteCijfer({1, 2, 3}), 3);
}

///Test of het ook werk met negatieve nummers
[Test]
public void TestNegative()
{
Assert.AreEqual(HoogsteCijfer({-7, -6, -5}), -5);
}

///Test of een lege array een argument exception geeft
[Test]
public void TestLegeArray()
{
bool exceptionThrown = false;
try
{
HoogsteCijfer({});
}
catch(ArgumentException)
{
exceptionThrown = true;
}
Assert.IsTrue(exceptionThrown);
}

Verwijderd

Dit slaat natuurlijk niet op NAW gegevens, maar is het meest simpele voorbeeld dat ik kon bedenken. Ik kan je vertellen dat je een tijdje met Unit testen bezig zult moeten zijn voordat je er efficienter door gaat werken dan dat je ervoor deed. Maar bijna iedereen die doorzet vindt het de moeite waard. Als je het wil leren kun je het beste een boek er over lezen, of nog beter code van anderen bekijken die veel met unit tests doen.

  • DutchCommando
  • Registratie: November 2000
  • Laatst online: 20:20
Verwijderd schreef op zondag 23 maart 2008 @ 21:46:
voorbeeld:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
///Geeft het hoogste nummer in een integer array
public int HoogsteCijfer(int[] cijfers)
{
    if (cijfers.length == 0) throw new ArgumentException("Lege array heeft geen hoogste");
    int hoogste = int.MINIMUM;
    foreach(int cijfer in cijfers)
    {
    if (cijfer > hoogste) hoogste = cijfer;
    }
    return hoogste;
}


tests:

[Test]
public void TestStandard()
{
    Assert.AreEqual(HoogsteCijfer({1, 2, 3}), 3);
}

///Test of het ook werk met negatieve nummers
[Test]
public void TestNegative()
{
    Assert.AreEqual(HoogsteCijfer({-7, -6, -5}), -5);
}

///Test of een lege array een argument exception geeft
[Test]
public void TestLegeArray()
{
    bool exceptionThrown = false;
    try
    {
    HoogsteCijfer({});
    }
    catch(ArgumentException)
    {
         exceptionThrown = true;
    }
    Assert.IsTrue(exceptionThrown);
}
Naast de genoemde tests:

NaamInputOutput
TestStandard1, 2, 33
TestNegative-7, -6, -5-5
TestEmptygeen elementenArgumentException


Zijn er nog meer te bedenken:

NaamInputOutput
TestStandardShuffled2, 3, 13
TestDuplicate2, 5, 3, 55
TestEmptynullArgumentException


Mogelijk pakt de methode per ongeluk standaard het laatste getal (wat zorgt voor een pass bij zowel TestStandard en TestNegative). Met TestStandardShuffled detecteer je deze fout. TestDuplicate checkt fouten die mogelijk opkomen met dubbele waarden. TestNull failed op dit moment met de code omdat er niet op null gecheckt wordt.

Let bij de TestEmpty test er ook op dat je niet op deze manier de test Assert. De meeste testing frameworks hebben de mogelijkheid om boven een methode een extra attribuut toe te voegen:
C#:
1
[ExpectedException( typeof( ArgumentException) )]


Op het moment dat deze exceptie niet opgegooid wordt volgt er een failed.

[ Voor 15% gewijzigd door DutchCommando op 23-03-2008 23:07 ]


Verwijderd

Dat snap ik ook wel, maar dit is makkelijker om een simpel voorbeeld te laten zien. Er zijn voor iedere programmeer taal verschillende test frameworks en beschikbaar. Voor c# zijn nunit, mbunit en de visual studio 2008 tests het populairst. Als je complexere code wil testen zul je een mocking framework nodighebben. Ik gebruik zelf rhinomocks met c#, maar typemock is ook populair. Voor de meeste programmeertalen is er wel iets.

Heeft iemand ervaring met het unit testen van Javascript?

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10 13:23
Verwijderd schreef op zondag 23 maart 2008 @ 23:53:
Dat snap ik ook wel, maar dit is makkelijker om een simpel voorbeeld te laten zien. Er zijn voor iedere programmeer taal verschillende test frameworks en beschikbaar. Voor c# zijn nunit, mbunit en de visual studio 2008 tests het populairst.
hoe zit dit met VB6 ??

  • whoami
  • Registratie: December 2000
  • Laatst online: 13:42
Ehm, ehm .... hoe ziet zo'n unit test er uit ?
Als je eens iets zoekt over unit testing, en het goed leest, zal je zien wat een unit-test doet: die test één specifiek stukje functionaliteit.
Wat je nu in je topicstart neergezet hebt, is zeer karig en allesomvattend. Het lijkt wel of je één unittest wilt, voor een ganse applicatie of module.

Als je het opslaan zelf wilt testen, zal je eens moeten kijken naar mocking frameworks.

Als je wil weten of er een unittest framework bestaat voor VB6, dan kan je toch minstens zelf eerst eens googlen ?
Trouwens, waarom zou je nu nog een nieuwe applicatie willen schrijven in een taal die al lang deprecated is ?

Er is je trouwens al tig keren verteld dat we hier op GoT wel wat meer verwachten dan een topicstart zoals deze (hoe ziet een unittest er uit). Ik wil je nog eens met aandrang vragen om daar eens op te letten...

[ Voor 14% gewijzigd door whoami op 24-03-2008 11:21 ]

https://fgheysels.github.io/


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11:59

NMe

Quia Ego Sic Dico.

whoami schreef op maandag 24 maart 2008 @ 11:19:
Er is je trouwens al tig keren verteld dat we hier op GoT wel wat meer verwachten dan een topicstart zoals deze (hoe ziet een unittest er uit). Ik wil je nog eens met aandrang vragen om daar eens op te letten...
En precies om die reden heb ik geen zin om dit topic open te laten. Als je wél de moeite kan doen om te laten zien wat je zelf al gedaan hebt om een antwoord te krijgen op je vraag dan kun je een nieuw topic openen, en anders kunnen we dit soort topics missen als kiespijn. Je zou intussen beter moeten weten. :/

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1

Dit topic is gesloten.