Récemment, j'aime aborder un problème de la manière TDD/test unitaire. Je ne programme plus autant en PHP ces derniers temps, mais voici ce que j'ai concocté. Pour être honnête, j'ai en fait regardé les exemples de code ici, et j'ai choisi celui que je pensais déjà correct. Ensuite, je voulais vérifier cela par des tests unitaires en utilisant les tests que vous avez fournis ci-dessus.
class TimeTest
require_once 'PHPUnit/Framework.php';
require_once 'Time.php';
class TimeTest extends PHPUnit_Framework_TestCase
{
protected $time;
protected function setUp() {
$this->time = new Time(10, 50);
}
public function testConstructingTime() {
$this->assertEquals("10:50", $this->time->getTime());
$this->assertEquals("10", $this->time->getHours());
$this->assertEquals("50", $this->time->getMinutes());
}
public function testCreatingTimeFromString() {
$myTime = Time::create("10:50");
$this->assertEquals("10", $myTime->getHours());
$this->assertEquals("50", $myTime->getMinutes());
}
public function testComparingTimes() {
$timeEquals = new Time(10, 50);
$this->assertTrue($this->time->equals($timeEquals));
$timeNotEquals = new Time(10, 44);
$this->assertFalse($this->time->equals($timeNotEquals));
}
public function testRoundingTimes()
{
// Round test time.
$roundedTime = $this->time->round();
$this->assertEquals("10", $roundedTime->getHours());
$this->assertEquals("45", $roundedTime->getMinutes());
// Test some more times.
$timesToTest = array(
array(new Time(1,00), new Time(1,12)),
array(new Time(3,15), new Time(3,28)),
array(new Time(1,00), new Time(1,12)),
);
foreach($timesToTest as $timeToTest) {
$this->assertTrue($timeToTest[0]->equals($timeToTest[0]->round()));
}
}
}
class Time
hours = $hours;
$this->minutes = $minutes;
}
public function equals(Time $time) {
return $this->hours == $time->getHours() &&
$this->minutes == $time->getMinutes();
}
public function round() {
$roundedMinutes = $this->minutes - ($this->minutes % 15);
return new Time($this->hours, $roundedMinutes);
}
public function getTime() {
return $this->hours . ":" . $this->minutes;
}
public function getHours() {
return $this->hours;
}
public function getMinutes() {
return $this->minutes;
}
}
Exécution des tests
alfred@alfred-laptop:~/htdocs/time$ phpunit TimeTest.php
PHPUnit 3.3.17 par Sebastian Bergmann.
....
Temps: 0 secondes
OK (4 tests, 12 assertions)
7 votes
Si vous arrondissiez à la quart d'heure le plus proche, 1:12 ne deviendrait-il pas 1:15 et 3:28 ne deviendrait-il pas 3:30 ? Plutôt, n'êtes-vous pas en train d'arrondir à la baisse au quart d'heure près ? La première option est un peu plus difficile que la seconde...
0 votes
Désolé, oui c'était le but. Arrondir À LA BAISSE à la quinzaine la plus proche.
0 votes
Fonction pour arrondir arbitrairement les DateTimes PHP : stackoverflow.com/a/57399274/339440
0 votes
Conseils pertinents sur la manière de gérer cette tâche avant que PHP n'ait une chance : Comment arrondir une heure au segment de 15 minutes le plus proche et Java, MySQL ou PHP - arrondir les minutes vers le bas au prochain segment de 10 minutes