Hallo ihr,
bin relativ frisch in das Thema PHPUnit eingestiegen und habe eine Frage; Ich möchte eine Methode testen, die ein Array mischt. (z. B. ein Array mit Karten, die ich mischen möchte).
Dafür habe ich mir folgendes zusammen gezimmert:
Um diese Methode zu testen, habe ich folgenden TestCase geschrieben:
Dieser schlägt immer fehl. Ich weiß auch warum: Das erste Element bleibt immer auf dem gleichen Index.
Das heißt, ich habe zwei Möglichkeiten: Ich schreibe shuffle() um, jedoch weiß ich da nicht genau wie ich es am dümmsten machen soll - hat jemand eine Anregung, wie man das Mischen eines Arrays besser erledigen kann?
Zweitens: Ich ermögliche dem Test, eine gewissen Toleranz zu haben. Beim Mischen werden ja auch nie alle Karten an eine andere Stelle gemischt, manche können auch nach dem Mischen noch an der gleichen Stelle sein. Wie könnte ich dem TestCase das beibringen, dass er erst fehl schlägt, wenn z. B. über 25% der Karten nicht an einem anderen Index liegen?
bin relativ frisch in das Thema PHPUnit eingestiegen und habe eine Frage; Ich möchte eine Methode testen, die ein Array mischt. (z. B. ein Array mit Karten, die ich mischen möchte).
Dafür habe ich mir folgendes zusammen gezimmert:
PHP-Code:
foreach ($this as $object)
{
$tmp_index = $this->indexOf($object);
$new_index = array_rand($this->toArray());
$tmp_object = $this->get($new_index);
// Switch the positions of the two objects
$this->set($new_index, $object);
$this->set($tmp_index, $tmp_object);
}
PHP-Code:
$before = $this->deck;
$this->deck->shuffle();
$after = $this->deck;
foreach ($this->deck as $item)
{
$old_index = $before->indexOf($item);
$new_index = $before->indexOf($item);
$this->assertNotEquals($old_index, $new_index);
}
Das heißt, ich habe zwei Möglichkeiten: Ich schreibe shuffle() um, jedoch weiß ich da nicht genau wie ich es am dümmsten machen soll - hat jemand eine Anregung, wie man das Mischen eines Arrays besser erledigen kann?
Zweitens: Ich ermögliche dem Test, eine gewissen Toleranz zu haben. Beim Mischen werden ja auch nie alle Karten an eine andere Stelle gemischt, manche können auch nach dem Mischen noch an der gleichen Stelle sein. Wie könnte ich dem TestCase das beibringen, dass er erst fehl schlägt, wenn z. B. über 25% der Karten nicht an einem anderen Index liegen?
Kommentar