[alg] Hoe zwaar testen jullie?

Pagina: 1 2 Laatste
Acties:
  • 703 views sinds 30-01-2008
  • Reageer

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22:08

.oisyn

Moderator Devschuur®

Demotivational Speaker

Alarmnummer: Mja, dit zegt een beetje weinig. Misschien moet je een simpeler voorbeeld kiezen en even uitleggen wat je nou precies aan het testen bent, ipv een copy-paste uit je prolog compiler ;)

[ Voor 5% gewijzigd door .oisyn op 03-06-2004 15:28 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
.oisyn schreef op 03 juni 2004 @ 15:28:
Alarmnummer: Mja, dit zegt een beetje weinig. Misschien moet je een simpeler voorbeeld kiezen en even uitleggen wat je nou precies aan het testen bent, ipv een copy-paste uit je prolog compiler ;)
Ik heb snel even een voorbeeldje in elkaar geplakt voor een stack een hierin worden een aantal methoden getest (niet allemaal want het is een voorbeeld :P)

code:
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
class StackTestCase extends TestCase{

    private Stack _stack = new Stack();

    public StackTestCase(String fixture){
        super(fixture);
    }
    
    public void test_pop_fromEmptyStack(){
        try{
            _stack.pop();
            fail("EmptyStackException expected");
        }catch(EmptyStackException ex){
        }
    }
    
    public void test_pop_fromNonEmptyStack(){
        Object item = "bla";
        _stack.push(item);
        
        Object foundItem = _stack.pop();
        assertSame(item,foundItem);
        assertTrue(_stack.isEmpty());
    }
    
    public void test_isEmpty_onNonEmptyStack(){
        _stack.push("onzin);
        assertFalse(_stack.isEmpty());
    }
    
    public void test_isEmpty_onEmptyStack(){
        assertTrue(_stack.isEmpty());
    }
}



Ik zal ook meteen even het stuk van mijn ANT-script erbij zetten. Alle unittesten die worden automatisch uitgevoerd, zo lang de testsuites maar eindigen op TestSuite.java.

XML:
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
44
45
46
47
48
49
<target name="test.run"
            depends="clean,compile.core,compile.parser"
            description="Tests sourcefiles against answerfiles">
        
        <mkdir dir="${classes.junit}"/>
            
        <javac  srcdir="${src.run-test}"
                debug="on"
                destdir="${classes.junit}"
                source="1.5">
                
            <classpath>
                <pathelement path="${classes.core}"/>
                <pathelement path="${classes.parser}"/>
                <fileset dir="${lib}">
                    <include name="**/*.jar"/>
                </fileset>
                <fileset dir="${test-lib}">
                    <include name="**/*.jar"/>
                </fileset>  
            </classpath>
        </javac>

        <mkdir dir="${junit-reports}"/>

        <junit haltonerror="yes" fork="on" printsummary="on">
            <classpath>
                <pathelement path="${classes.core}"/>
                <pathelement path="${classes.parser}"/>
                <pathelement path="${classes.junit}"/>
                <fileset dir="${lib}">
                    <include name="**/*.jar"/>
                </fileset>
                <fileset dir="${test-lib}">
                    <include name="**/*.jar"/>
                </fileset>  
            </classpath>
            
            <formatter type="plain"/>
            <jvmarg value="-ea"/>
            <jvmarg value="-Xbootclasspath/p:${jsr14.home}/gjc-rt.jar"/>
                                
            <batchtest todir="${junit-reports}">
                <fileset dir="${src.run-test}">
                    <include name="**/*TestSuite.java"/>
                </fileset>
            </batchtest>            
        </junit>
    </target>

[ Voor 45% gewijzigd door Alarmnummer op 03-06-2004 15:58 ]


  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13

MaxxRide

Surf's up

Ik moet zeggen dat ik erg onder de indruk ben van Junit.org testframework. Ik heb me nooit echt (willen) verdiept in unit testing. Met deze discussie zijn mijn ogen behoorlijk geopend (het is niet dat ik het nut er niet van in zag maar meer dat ik het nog niet echt kende oid).

Dit is echt cool en in grote projecten en bij moeilijke functies etc zeer bruikbaar! Super dit!

If you are not wiping out you are nog pushing enough...


  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

Alarmnummer schreef op 03 juni 2004 @ 12:15:
[...]

Hoe vaak ben jij een uur kwijt om te zoeken naar een bug? En hoeveel sourcecode moet je daar gemiddeld voor door bladeren?
Nooit eigenlijk. En alle keren dat ik een grote zoektocht was begonnen naar een bug bleek die eigenlijk helemaal niet te bestaan en had een gebruiker iets verkeerd ingesteld (zoals een tv die kapot is omdat de stekker er niet in zit).
[...]

De kunst van het unit testen is op zoek te gaan naar het punt dat unit testen uit kan. Ik ben door meer unit testen minder tijd nodig met ontwikkeling en zorg ervoor dat mijn api`s sluitend(er) zijn dan zonder testen. Maar je kunt uiteindelijk ook alles gaan testen, maar dan heb je geen tijdswinst meer. Unit testen levert mij dus tijdswinst op doordat ik een reeks testen maak waarbij ik met relatief weinig moeite de meeste bugs eruit kan pakken.
Volgens mij ben ik nou net met iets bezig waar unit-testen niet zo relevant zou zijn. Want eigenlijk is het systeem wat ik nu aan het maken ben één grote setter en getter. Je stop er X,Y en Z in en er moet X,Y en Z weer uitkomen. Als dat werkt dan heb ik de unit-test toch niet (meer) nodig?

Kun je iets meer achtergrond info waar jij deze zware manier van testen dan voor nodig hebt?

seweso's blog


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
seweso schreef op 03 juni 2004 @ 16:38:
[...]
Nooit eigenlijk. En alle keren dat ik een grote zoektocht was begonnen naar een bug bleek die eigenlijk helemaal niet te bestaan en had een gebruiker iets verkeerd ingesteld (zoals een tv die kapot is omdat de stekker er niet in zit).
Vertel jij nu dat alle software die je schrijft nooit een bug bevat? Damn, misschien moet je eens naar Bill bellen.
Volgens mij ben ik nou net met iets bezig waar unit-testen niet zo relevant zou zijn. Want eigenlijk is het systeem wat ik nu aan het maken ben één grote setter en getter. Je stop er X,Y en Z in en er moet X,Y en Z weer uitkomen. Als dat werkt dan heb ik de unit-test toch niet (meer) nodig?
En die 'setter' wordt door geen enkele andere applicatie / method / oid gebruikt, en gebruikt ook geen enkele andere method ?
Trouwens om na te gaan of die functie werkt, zal je ze toch op de een of andere manier moeten testen.
Verder ontgaat me de bedoeling ook van een systeem als hetgeen eruit komt precies hetzelfde is als hetgeen je erin gestoken hebt, maar dat is een andere discussie.

[ Voor 14% gewijzigd door whoami op 03-06-2004 16:44 ]

https://fgheysels.github.io/


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
seweso schreef op 03 juni 2004 @ 16:38:
Nooit eigenlijk. En alle keren dat ik een grote zoektocht was begonnen naar een bug bleek die eigenlijk helemaal niet te bestaan en had een gebruiker iets verkeerd ingesteld (zoals een tv die kapot is omdat de stekker er niet in zit).
a) je hebt nog niet veel ervaring
b) je bent goddelijk :P
c) je liegt ;)
Volgens mij ben ik nou net met iets bezig waar unit-testen niet zo relevant zou zijn. Want eigenlijk is het systeem wat ik nu aan het maken ben één grote setter en getter. Je stop er X,Y en Z in en er moet X,Y en Z weer uitkomen. Als dat werkt dan heb ik de unit-test toch niet (meer) nodig?
Kijk eens naar die unit test. Is die ingewikkeld? Het stel echt niet veel voor hoor? En als je je scripts een beetje goed instelt dan is zelfs het draaien een peuleschil.
Kun je iets meer achtergrond info waar jij deze zware manier van testen dan voor nodig hebt?
Eigelijk alles wat niet triviaal is zou je kunnen unit testen. Als jij kan garanderen dat je weinig fouten in je code hebt, dan is unit testen misschien niet voor jou. Maar ik en de andere developers zijn it-ers van vlees en bloed. En wij maken gewoon fouten. Sommige fouten zijn ongelovelijk stom, maar je hebt ook veel gecompliceerdere fouten. Op het moment dat je een groot systeem hebt met veel complexiteit, dan is het een drama om een bug op te sporen omdat die op veel punten kan zijn ontstaan. Met unit testen kan je voor subsystemen zeggen dat de kans redelijk klein is dat de fout daar is ontstaan omdat die getest zijn. Hierdoor kan je je op een kleiner gebied concentreren om de bug te achterhalen. In de praktijk is het trouwens niet altijd even eenvoudig hoor :) Zelfs subsystemen kunnen met goed unit testen nog fouten veroorzaken en dan is het nog steeds lastig om te achterhalen waar de bug zit. Maar als je toch moet debuggen, dan wil ik hier in de toekomst ook een meerwaarde van hebben, en dat heb je alleen met unittesten en niet met een debugger/printlines.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22:08

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik gebruik zelf overigens ook nooit unittests, maar dat is ook mede omdat dat een beetje lastig is met de code die ik schrijf. Hoe bepaal je bijvoorbeeld of een object wel goed is gerenderd in een 3D omgeving? Of dat het collision systeem wel goed werkt? Ik kan eigenlijk geen enkel geometrisch algoritme bedenken wat wel goed te testen is. Eigenlijk is dat gewoon een kwestie van veel runnen en met een menselijk oog kijken of het goed gaat :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • RSchellhorn
  • Registratie: Augustus 2001
  • Laatst online: 19-05 12:56
Een punt wat ik hier nog niet gelezen heb, is dat je een testsuite niet alleen voor jezelf schrijft. Als later iemand anders je code moet aanpassen, is het voor hem ook een hulpmiddel om te checken welke gevolgen een verandering heeft.
Voorwaarde hiervoor is wel dat de unittests ook daadwerkelijk voor elke unit ( klassen & methode ) geschreven wordt.

Ik ben van mening dat een testsuite en het checken van pre- en postcondities iets essentieels is voor projecten waar meer dan één persoon aan werkt. Als je met meer mensen werkt, moet je elke unit beschermen tegen foutief gebruik door anderen. Andere mensen moeten zich ergens op kunnen richten, anders is er niet met je units te werken.

"Ik heb zo veel soep gegeten, dat kan een mens niet aan. Ik heb zo veel soep gegeten, kan bijna niet meer staan. Ik zat daar maar te slurpen achter die grote kop en als ik bijna klaar was, dan schepten ze weer op!" (Hans Teeuwen)


  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

Alarmnummer schreef op 03 juni 2004 @ 16:47:
[...]

a) je hebt nog niet veel ervaring
b) je bent goddelijk :P
c) je liegt ;)
a) ik ben pas 2jr ing informaticus
b) mijn psychiater noemt dat grootheidswaanzin
c) ik lieg niet, ik tel gewoon alle spaghetti programma's die ik heb opgeleverd niet mee
Kijk eens naar die unit test. Is die ingewikkeld? Het stel echt niet veel voor hoor? En als je je scripts een beetje goed instelt dan is zelfs het draaien een peuleschil.
Ja die is ingewikkeld. Maar dat zal wel met de ingewikkeldheid van je applicatie te maken hebben. Maar ik zie zeker voordelen in unit-testen, vooral als form van documentatie. Daarnaast denk ik dat het zorgvuldig en tijdig testen van delen van een systeem uiteindelijk zal leiden tot een beter systeem, en dan bedoel ik qua ontwerp en niet alleen omdat er minder bugs in zullen zitten.
Eigelijk alles wat niet triviaal is zou je kunnen unit testen. ....
Jij denkt dus dat ik alleen bezig ben met triviale dingen?

seweso's blog


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
seweso schreef op 03 juni 2004 @ 22:33:
[...]
Jij denkt dus dat ik alleen bezig ben met triviale dingen?
Dat heb ik niet gezegd :) Jij vroeg wat je allemaal moest testen. En ik zeg: alles wat niet triviaal is (dus geen getters en setters). Alles waar een klein beetje complexiteit in zit (in principe al dat stackvoorbeeld) 'moet' geunit test worden.

[ Voor 3% gewijzigd door Alarmnummer op 03-06-2004 22:46 ]


  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

Hoe maak je hier unit-test voor dan? (ff wat concrete voorbeelden die ik uit m'n source-tree heb gehaald)
1. Een functie die excel-cellen die op het klembord staan automatisch omvormt naar een array.
2. Een wachtwoord generatie-functie
3. Een functie die de tijd terug-geeft van een centrale server.
4. Functies en objecten die gegevens uit een database halen (database abstractie-laag).
5. Xml lezen, schrijven en tranformeren.
6. Externe programma's en api's aanroepen zoals MS-Word, xml/xhtml invoegen in een samengevoegd ms-word-document.
7. Conversie functies (b.v. speciale karakters uit een string halen)
8. Functies en classen t.b.v. de grafische user-interface.
9. Functie om te bepalen of iets een werkdag is.
10. Classen/functies waarmee je de beschikking krijgt over een 'oneindig' aantal velden die je aan elke tabel/object kan koppelen.

Ik heb het misschien mis, maar volgens mij kost het maken van bovenstaande unit-tests meer tijd dan de functies/classen zelf...

Ik ben als het gaat om testen heel pragmatisch: als het werkt dan werkt het.

seweso's blog


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:44

Creepy

Tactical Espionage Splatterer

seweso schreef op 03 juni 2004 @ 23:26:
Ik heb het misschien mis, maar volgens mij kost het maken van bovenstaande unit-tests meer tijd dan de functies/classen zelf...

Ik ben als het gaat om testen heel pragmatisch: als het werkt dan werkt het.
Jij hebt dus geen bugs in je code? Jij pas nooit je functies aan?

Als je je unit tests al hebt, hoef je ze na het bugfixen van bugs niet aan te passen en kan je de tests gebruiken om je bugfix te testen. Zeker met complexere code levert het uiteindelijk tijdwinst op.

Overigens vraag je hoe een aantal gevalen te unit testen. Unit testen doe je op losse functies en methods. Die hebben allemaal pre en post condities. Daar test je dus op.
En als je bij jou voorbeeld 2 (wachtwoord generatie) niet een unit test kan schijven in minder tijd dan waarin je je wachtwoord functie hebt geschreven dan is er denk ik iets mis ;)
De rest van je voorbeelden (op 1 na) beschrijven allemaal meerdere gevallen i.p.v. 1 losse method.
Visuele dingen kan je niet unit testen nee, dus dat wordt wat moeilijk. Maar zodra je een functie of method hebt met een input die dan een bepaalde output waarde moet hebben dan is het unit testen in principe vrij makkelijk. Eenmaal je unit tests geschreven en je hebt er daarna alleen maar tijdwinst door als de functies / methods aangepast zijn. Je hoeft dan niet meer handmatig te testen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

Creepy schreef op 03 juni 2004 @ 23:40:
[...]

Jij hebt dus geen bugs in je code? Jij pas nooit je functies aan?

Als je je unit tests al hebt, hoef je ze na het bugfixen van bugs niet aan te passen en kan je de tests gebruiken om je bugfix te testen. Zeker met complexere code levert het uiteindelijk tijdwinst op.

Overigens vraag je hoe een aantal gevalen te unit testen. Unit testen doe je op losse functies en methods. Die hebben allemaal pre en post condities. Daar test je dus op.
En als je bij jou voorbeeld 2 (wachtwoord generatie) niet een unit test kan schijven in minder tijd dan waarin je je wachtwoord functie hebt geschreven dan is er denk ik iets mis ;)
De rest van je voorbeelden (op 1 na) beschrijven allemaal meerdere gevallen i.p.v. 1 losse method.
Visuele dingen kan je niet unit testen nee, dus dat wordt wat moeilijk. Maar zodra je een functie of method hebt met een input die dan een bepaalde output waarde moet hebben dan is het unit testen in principe vrij makkelijk. Eenmaal je unit tests geschreven en je hebt er daarna alleen maar tijdwinst door als de functies / methods aangepast zijn. Je hoeft dan niet meer handmatig te testen.
Ff kijken of je gelijk hebt...

1. 1 functie (15 regels code, 15 minuten)
2. 1 functie (15 regels code, 4 minuten)
3. 1 functie (1 regel code, 1 minuut excl server side prog.)
4. 1 functie (20 regels code, 2 uur, generieke dlookup functie)
5. Word uiteraard (grotendeels) uitbesteed aan msxml2
6. 1 functie (30 regels code, 6 uur)
7. Verscheidene kleine functies
8. Functies en classen t.b.v. de grafische user-interface.
9. 1 functie
10. Aap

Eeh nee, het merendeel is wél één functie...

En ja ik snap dat je voor een wachtwoord-generatie programma een unit-test kan maken voor de pre- en post-condities. Maar om de pre en post-condities te controleren heb assert functies voor (wat al eerder in dit Topic is genoemd). Waar je op zou moeten testen is of de output wel degelijk random is, én niet overeenkomt met de vorige start van de applicatie. Maar ja als je de functie eenmalig schrijft en er vervolgens nooit meer iets aan gaat wijzigen....

Dus..of mij overtuigen dat ik het ook nodig heb, of aangeven waarom jullie die unit-test wél nodig hebben.

En is het niet zo dat je unit-test nodig hebt in Java omdat je daar geen command-window hebt?

seweso's blog


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
seweso schreef op 04 juni 2004 @ 01:02:
[...]

Dus..of mij overtuigen dat ik het ook nodig heb, of aangeven waarom jullie die unit-test wél nodig hebben.
Unit tests zijn niet noodzakelijk, ze zijn alleen handig en kunnen de ontwikkeltijd verminderen doordat je sneller je componenten kunt testen (nagaan of ze correct werken) als je er veranderingen aan gedaan hebt.
En is het niet zo dat je unit-test nodig hebt in Java omdat je daar geen command-window hebt?
Wat heeft een command window ermee te maken? :?

https://fgheysels.github.io/


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:44

Creepy

Tactical Espionage Splatterer

seweso schreef op 04 juni 2004 @ 01:02:
[...]


Ff kijken of je gelijk hebt...

1. 1 functie (15 regels code, 15 minuten)
2. 1 functie (15 regels code, 4 minuten)
3. 1 functie (1 regel code, 1 minuut excl server side prog.)
4. 1 functie (20 regels code, 2 uur, generieke dlookup functie)
5. Word uiteraard (grotendeels) uitbesteed aan msxml2
6. 1 functie (30 regels code, 6 uur)
7. Verscheidene kleine functies
8. Functies en classen t.b.v. de grafische user-interface.
9. 1 functie
10. Aap

Eeh nee, het merendeel is wél één functie...
Mooi, dan zijn unit tests er dus makkelijk voor te schrijven :D
En ja ik snap dat je voor een wachtwoord-generatie programma een unit-test kan maken voor de pre- en post-condities. Maar om de pre en post-condities te controleren heb assert functies voor (wat al eerder in dit Topic is genoemd). Waar je op zou moeten testen is of de output wel degelijk random is, én niet overeenkomt met de vorige start van de applicatie.
Je kan prima een unit test schrijven die 2 keer je passwoord generatie functie aanroept, en deze twee passworden vergelijkt.
Maar ja als je de functie eenmalig schrijft en er vervolgens nooit meer iets aan gaat wijzigen....
Ah... sue me. Ik maak wel eens fouten in mijn code. Er zitten wel eens bugs in mijn functies ook al denk ik dat ze goed werken. En af en toe doe ik zelfs wat optimalisaties ;)
Dus..of mij overtuigen dat ik het ook nodig heb, of aangeven waarom jullie die unit-test wél nodig hebben.

En is het niet zo dat je unit-test nodig hebt in Java omdat je daar geen command-window hebt?
Tuurlijk kan je ook asserts gebruiken, maar zorg je er dan wel voor dat je die asserts weer netjes uitzet op het moment dat je uitlevert aan een klant? Het zou niet de eerste keer zijn dat ik, zelfs in "goed" werkende software de asserts voorbij zie vliegen op de commandline.
En hoe test je met een assert of de output klopt met de input? In de aanroepende code?

En dat je in java geen commandline hebt is bull. Ik ben unit tests gaan gebruiken toen ik met Delphi bezig was. Unit testen is echt niet een specifiek java iets.

Edit: tuurlijk kan je ook zonder unit tests de boel doortesten, of laten doortesten. Maar zeggen "ah, daar heb ik asserts voor" is naar mijn idee wat kort door de bocht ;)

[ Voor 18% gewijzigd door Creepy op 04-06-2004 09:23 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • flowerp
  • Registratie: September 2003
  • Laatst online: 04-02 02:01
Is er hier eigenlijk iemand die ervaring heeft met unit testen (junit) en java application servers (J2EE)?

Voor veel functionaliteit heb je toch veel van je server nodig. Hoe gaat dit dan precies? Of kan het niet?

It's shocking to find how many people do not believe they can learn, and how many more believe learning to be difficult.


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
flowerp schreef op 05 juni 2004 @ 17:49:
Is er hier eigenlijk iemand die ervaring heeft met unit testen (junit) en java application servers (J2EE)?

Voor veel functionaliteit heb je toch veel van je server nodig. Hoe gaat dit dan precies? Of kan het niet?
check: http://www.junit.org/news/extension/index.htm

  • flowerp
  • Registratie: September 2003
  • Laatst online: 04-02 02:01
Hmmm, junit en j2ee lijkt dus geen populaire combinatie te zijn. Als de bovengenoemde link -de- plaats hiervoor is, en de nieuwste contributie is uit 2002 dan zegt dit toch wel genoeg. Waarschijnlijk dat j2ee ontwikkelaars niet veel waarde zien in junit testen?

Ik ga er iniedergeval wel naar kijken. Hopen dat het ook bruikbaar is voor Eclipse in combinatie met Orion.

It's shocking to find how many people do not believe they can learn, and how many more believe learning to be difficult.


Verwijderd

flowerp schreef op 05 juni 2004 @ 17:49:
Is er hier eigenlijk iemand die ervaring heeft met unit testen (junit) en java application servers (J2EE)?

Voor veel functionaliteit heb je toch veel van je server nodig. Hoe gaat dit dan precies? Of kan het niet?
Wij hebben daarvoor ServerTestCase (http://www.junit.org/junit/download/ServerTestCase.zip , via die link van Alarmnummer wel te vinden). Je moet dan de ServerTestCase tests deployen naar de server, en via een session layer aanroepen. Het resultaat/fout wordt dan mooi doorgegeven naar de cliënt.

Het irritante is dat je bij het ontwikkelen van een test steeds die test apart moet deployen. (wij werken nog met BEA WLS 6.1, waar hot deploy enkel een officiële spec schijnt te zijn, een BEA consulente vertelde dat 8.1 beter zou zijn, maar dat het werken zonder JAR/EAR/WARs nog steeds een kadukke optie was :S)

Waar je ook voor moet opletten zijn rollbacks, als we een fout (al dan niet gewild) gooien in de code (veel fouten gaan gepaard met een rollback om welbekende redenen), en de test vangt die op (omdat de test juist 'test' of die fout gegooid wordt) en de volgende test géén aparte test (methodenaam die begint met test) is, dan krijg je fouten 'transaction already rolled back' en dergelijke. Elke test wordt namelijk apart gestart via die session EJB. Dus daar moet je dan ook wel opletten.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
Dit is nog een interessante add-in voor VS.NET:

www.testdriven.net

https://fgheysels.github.io/


  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Is er een simpele - maar diepgaande - Nederlandstalige uitleg over hoe je unit tests schrijft? Want ik ken het woord, maar ik kan maar niet te weten komen wat het nou precies inhoud.

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
MUBA schreef op dinsdag 30 november 2004 @ 09:52:
Is er een simpele - maar diepgaande - Nederlandstalige uitleg over hoe je unit tests schrijft? Want ik ken het woord, maar ik kan maar niet te weten komen wat het nou precies inhoud.
Als je dit topic door ploegt zul je meer dan genoeg goeie examples tegen komen.

  • TukkerTweaker
  • Registratie: November 2001
  • Laatst online: 19-05 16:06
Ik gebruik unit testing ook voor de niet triviale dingen maar vooral eigenlijk op nieuwe code waarvan ik een hoge verwachting heb dat het mis kan gaan. Zeker in een HA omgeving hecht ik hier veel waarde aan, net zo veel als aan de monkey tests.

  • Eelke Spaak
  • Registratie: Juni 2001
  • Laatst online: 12-05 15:26

Eelke Spaak

- Vlad -

Om SessionBeans in een J2EE-applicatie te testen, heb ik simpel een consoleprogrammaatje geschreven dat verbinding maakt met de server, en dan wat methodes aanroept om te kijken of ze het goede resultaat leveren.

Is er een reden om dit niet met een static void main() maar met een void test() te doen?

Ik weet niet zoveel van unittests af, dus dit is een eerlijke vraag. :)

TheStreme - Share anything with anyone


  • TukkerTweaker
  • Registratie: November 2001
  • Laatst online: 19-05 16:06
Eelke Spaak schreef op dinsdag 30 november 2004 @ 11:06:
Om SessionBeans in een J2EE-applicatie te testen, heb ik simpel een consoleprogrammaatje geschreven dat verbinding maakt met de server, en dan wat methodes aanroept om te kijken of ze het goede resultaat leveren.
DIt kan in feite een TestCase uit het framework zijn, voordeel van het junit framework (kort door de bocht) is dat je verschillende handige functie's kado krijg, je een test raamwerk op kunt zetten en met build scrpits diverse test kunt uitvoeren. M.a.w. het neemt je een boel werk uit handen i.p.v. dan zelf o p te zetten met consoleprogrammatjes.

  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

Interessante materie. Op mijn ontdekkingsreis kwam ik deze tegen, http://jakarta.apache.org/cactus/, misschien dat dit een beter J2EE tester is.

Unit testen klikt heel interessant, maar tot welk niveau is het bruikbaar? Ik krijg de indruk dat je meer per functie aan het testen bent. Hoe werkt dat dan met recursieve functies? Ik heb bijv. een keer een zeer uitgebreide matchings functie gemaakt om paren te combineren. De had ik onderverdeeld in een aantal subfunctie, maar die zijn allemaal afhankelijk van de toestand die de aanroepende procedure.

Stel dat ik daar een TestCase voor schrijf, dan is de test case in eerste instantie dus verantwoordelijk voor het neerzetten van de juiste toestand? En hoe test je dan enkele recursieve functies (die echt alleen zichzelf aanroepen), de unit test kan dan toch ook niet veel meer doen dan afwachten tot dat deze klaar is (of je test duurt te lang en uiteindelijk ontdenk je dat je in een oneindige lus terecht gekomen bent).

www.fendt.com | Nikon D7100 | PS5


Verwijderd

Een recursieve functie moet toch altijd eenmalig door een andere functie worden aangeroepen?

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Als je een recursieve functie test, dan test je die eigenlijk als een normale functie. Je weet wat je wilt krijgen bij een bepaalde input en dan test je ofdat je dat ook krijgt. Omdat je weet hoe de functie werkt kan je ook extra testen op 'boundary values', dus dan test je de base case apart. Oneindige loop zal nooit oneindig zijn omdat je op een gegeven moment door je stack heen bent. Die exception die dan opgegooit wordt kan je eventueel catchen...

"Beauty is the ultimate defence against complexity." David Gelernter


  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

Verwijderd schreef op dinsdag 30 november 2004 @ 15:37:
Een recursieve functie moet toch altijd eenmalig door een andere functie worden aangeroepen?
Uiteraard, maar daarna roept hij zichzelf aan totdat er een bepaalde voorwaarde (niet meer) geldig is.

www.fendt.com | Nikon D7100 | PS5


  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

Macros schreef op dinsdag 30 november 2004 @ 15:38:
Omdat je weet hoe de functie werkt kan je ook extra testen op 'boundary values', dus dan test je de base case apart. ...
Dus is de TestCase verantwoordelijk voor het initialiseren van de toestand, of splits je de recursie voor het testen in twee delen waarvan 1 het recursieve deel is en 1 het reken deel? Voor simpele recursieve dingen zet ik nog wel eens alles gewoon in 1 functie.

www.fendt.com | Nikon D7100 | PS5


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Ja, de TestCase brengt eerst het object in de gewenste toestand (en alle andere objecten de je nodig hebt om de test uit te voeren)

"Beauty is the ultimate defence against complexity." David Gelernter


  • bloody
  • Registratie: Juni 1999
  • Laatst online: 19:49

bloody

0.000 KB!!

Ik wil TS hierbij aanraden om eens te kijken naar maven (http://maven.apache.org). Dit tooltje (TOOL!) is handig om bv s'nachts al je junit testjes te draaien , zodat je morgenvroeg als je binnenkomt zetten, direct kunt zien wat en hoeveel er fout gaat!.

Ander leuke plugin is de jcoverage die aangeeeft hoeveel 'dekking' je met je junit testjes hebt bereikt op je code. :9 :9 Dus hoeveel je hebt afgetest.

Alles wordt zo lekker voor je geautomatiseerd, en dat is wel zo handig met deadlines.

Nog een note voor TS: maven kan jou geliefde build files zelfs genereren! :)

nope


  • bloody
  • Registratie: Juni 1999
  • Laatst online: 19:49

bloody

0.000 KB!!

een toevoeging voor struts liefhebbers: zie http://strutstestcase.sf.net voor een het testen van struts met junit! (werkt SUPER)

nope


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
bloody schreef op dinsdag 30 november 2004 @ 21:10:
Ik wil TS hierbij aanraden om eens te kijken naar maven (http://maven.apache.org). Dit tooltje (TOOL!) is handig om bv s'nachts al je junit testjes te draaien , zodat je morgenvroeg als je binnenkomt zetten, direct kunt zien wat en hoeveel er fout gaat!.
Als ik met wat complexere zaken bezig ben dan draai ik alleen maar unit testen (ik compileer dan niet eens). Dus een nachtelijke test is leuk.. maar niet voldoende.

In de toekomst (als unit testen bij ons standaard is.. en niet alleen bij mij) zou het ook een idee zijn om een continuous integration server te gaan draaien, waarbij het niet mogelijk is om code in te checken waarvan de unit tests niet lukken. Weet je zeker dat je altijd een werkbare source hebt.
Ander leuke plugin is de jcoverage die aangeeeft hoeveel 'dekking' je met je junit testjes hebt bereikt op je code. :9 :9 Dus hoeveel je hebt afgetest.
Ik heb clover wel eens gebruikt.

Maar een volautmatische test draaien omdaarmee af te leiden hoeveel coverage je hebt vind ik niet voldoende. Meestal draai ik het in combinatie met een paar tests.. ik krijg dan veel beter te zien wat er gecovered is.. veel informatiever.
Alles wordt zo lekker voor je geautomatiseerd, en dat is wel zo handig met deadlines.
ant test.all vind ik ook snel genoeg :)
Nog een note voor TS: maven kan jou geliefde build files zelfs genereren! :)
Kan wel zijn.. maar de standaard is ANT en ik werk bij een bedrijf waar dit ook de standaard is.. nouja... als ze er dan ook echt gebruik van maken zoals het hoort.. Maar ANT is (helaas) de standaard.. en probeer me daar maar aan te houden.

En ja.. maven is beter :)

[ Voor 11% gewijzigd door Alarmnummer op 30-11-2004 21:32 ]


  • dotcode
  • Registratie: Augustus 2003
  • Laatst online: 17-05 21:04

dotcode

///\00/\\

Testen is niet nodig als je de oorzaak van de bugs kan achterhalen en die kan weg nemen. Zie http://c2.com/cgi/wiki?SourcesOfBugs.

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Soms heeft een unit-test bijzonder veel objecten nodig om de methode te kunnen testen. Zelf vind ik dit nogal veel tijd kosten, hoe lossen jullie dit op?

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:44

Creepy

Tactical Espionage Splatterer

dotcode schreef op woensdag 01 december 2004 @ 21:12:
Testen is niet nodig als je de oorzaak van de bugs kan achterhalen en die kan weg nemen. Zie http://c2.com/cgi/wiki?SourcesOfBugs.
Naasten testen op crashes e.d. valt er nog veel meer te testen hoor :)

Werkt het produkt zoals de gebruiker het verwacht, kloppen de uitkomsten wel met de ingevoerde waarden etc. etc. etc.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1 2 Laatste