EasyMock 1.0 is available (2003-08-17) --TammoFreese?
EasyMock is een raamwerkje voor het namaken van implementaties van JavaInterfaces ten behoeve van JunitTests. Met EasyMock hoef je niet zelf de interfaces te implementeren, maar kun je als het ware een sequentie van te geven antwoorden bepalen. Het EasyMock raamwerkt helpt je dan om te controleren of het te testen object de nagemaakte interface netjes de sequentie volgt, en steeds de juiste parameters aan de mock interface doorgeeft. Het te testen object wordt zo als het ware in een net gevangen.
Op XpBijeenkomst2_8 hebben een paar groepjes EasyMock uitgeprobeerd. Het gebruik van EasyMock vergt enige gewenning. Eerst vraag je aan EasyMock voor de interface die je wilt namaken (bij voorbeeld java.lang.sql.ResultSet) een control-object. Aan dit control-object kun je dan via 'getMock' het mock-object vragen.
Het mock-object gebruik je in twee toestanden: de setup toestand en de geactiveerde toestand.In de setup-toestand geef je aan welke methoden van het mock-object in welke volgorde mogen worden aangeroepen. Dit doe je door deze methoden in de setup toestand aan te roepen. Eventuele parameters die worden meegegeven worden door easymock onthouden en vergeleken met wat het te testen object meegeeft. Return-waarden van deze methoden kunnen worden bepaald door na de aanroep op het mock-object aan het control object de return-waarde mede te delen.Tijdens XpBijeenkomst2.8 was er nog de vraag hoe je kon bepalen hoe vaak een bepaalde return-waarde kan worden teruggegeven. De returnwaarde wordt normaalgesproken bepaald met 'control.setReturnValue(eenWaarde)'. Deze methode maakt het mogelijk om een onbepaald aantal keren de mock-methode aan te roepen. Elke keer wordt dan 'eenWaarde' opgegeven. In het voorbeeld, waarbij ResultSet werd nagemaakt resulteerde dit in het vastlopen van java. De te testen methode bevatte namelijk een lus met 'resultSet.next()'. Als die wordt geinitialiseerd met 'control.setReturnValue(true)' dan komt er een eindeloze lus. Dit is te voorkomen door bij voorbeeld de aanroep 'control.setReturnValue(true,3)' te doen. De extra parameter geeft aan hoe vaak achter elkaar een bepaalde waarde mag worden teruggegeven. Easymock kan ook controleren of er dan precies drie aanroepen zijn geweest. Hiermee kan zeer precies als het ware een SequenceDiagram? worden uitgeprogrammeerd.
Met 'control.activate()' wordt het mock-object geactiveerd. Daarna controleert EasyMock de aanroepen zoals in de setup-fase gespecificeerd.
Na het aanroepen van het te testen object, en eventuele lokale asserts kan met 'control.verify' worden gecontroleerd of de methoden van het mock-object niet te vaak of te weinig zijn aangeroepen.
Hoe het precies werkt is te zien in de voorbeeld bestanden. De te testen klasse is dbreader.java . De testklasse is dbeadertest.java --WillemVanDenEnde
