[unittests] Testen van code met huidige tijd

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 14-09 19:30

alienfruit

the alien you never expected

Topicstarter
Ik ben momenteel bezig met enkele klassen die op basis van de huidige tijd en XML content bepaalde beslissingen moet maken. Alleen nu wil ik graag hiervoor enkele unit tests schrijven. Maar eerlijk gezegt heb ik hier niet veel ervaring mee. En ik zou graag advies willen in winnen bij de experts die er voor hebben gestudeerd :D

Het probleem is namelijk dat ik gebruik maak van
Flash ActionScript:
1
now = new Date()
om de huidige tijd verkrijgen of vervolgens op basis van de
code:
1
now.time
. Een reeks controles uit te voeren.

Het is een correct gebruik een tijdstip door te geven aan de klasse middels
code:
1
EventsdecisionFilter.currentTime = new Date().time
?

Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Het lijkt me in dat geval inderdaad het beste om een algemene module "doe iets gegeven een tijd" te maken en de tijd 'nu' er bij het uitvoeren pas in te proppen. Dan kan je met een vaste 'testtijd' gewoon autmatische tests draaien. Overigens ook los van het test-perspectief: wat nou als je op een gegeven moment bedenkt dat je je report op een andere datum wilt draaien?

Je kunt er natuurlijk wel voor kiezen om in je constructor standaard de huidige tijd te nemen, maar een parameter op te nemen waarmee je een andere tijd meegeeft.

[ Voor 41% gewijzigd door ValHallASW op 15-07-2011 11:27 ]


Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 14-09 19:30

alienfruit

the alien you never expected

Topicstarter
Aah, goed plan. Het voornamelijk om de code te verifiëren middels unit tests. Met name om dat het testsysteem random de XML data aanmaakt. Dit maakt het testen op het apparaat (wanneer het werkt :|) er niet makkelijker op.

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
Toevallig kwamen we hetzelfde probleem tegen toen we onze cursus clean code gaven: je hebt een applicatie die na user invoer antwoord geeft met de hudige tijd. Hoe test je dit met een vaste (en voorspelbare) teruggegeven tijd?

Antwoord: Aan het object dat antwoord geeft op je vraag om de tijd ken je een nieuw object TimeProvider toe, die de datum teruggeeft. De implementatie geeft gewoon de huidige tijd terug: in de test geef je er een mock object of stub implementatie aan mee.

Code:

TimeResponder: https://github.com/xebia/...onders/TimeResponder.java
TimeProvider: https://github.com/xebia/.../DefaultTimeProvider.java
TimeResponder unit test: https://github.com/xebia/...rs/TimeResponderTest.java

(natuurlijk is het testen van de DefaultTimeProvider dan weer een probleem op zich. Maar dat zou je kunnen afvangen met een test die controleert of de Date die teruggegeven wordt ongeveer nu is, op een seconde precies oid).

Acties:
  • 0 Henk 'm!

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 22:43

Kettrick

Rantmeister!

Je zou ook even naar JodaTime kunnen kijken, hiermee kan je redelijk eenvoudig de tijd aanpassen tijdens je tests, en deze later weer terugzetten naar de echte tijd.