166 votes

Différence entre assertEquals et assertSame dans phpunit?

PHPUnit contient un assertEquals méthode: http://www.phpunit.de/manual/3.6/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.assertions.assertEquals

Il dispose également d'une assertSame méthode: http://www.phpunit.de/manual/3.6/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.assertions.assertSame

À première vue, on dirait qu'ils font la même chose. Quelle est la différence entre les deux? Pourquoi sont-ils définis?

252voto

Mike Purcell Points 12082

J'utilise à la fois de façon sporadique, mais d'après les docs:

assertSame: ", Rapporte une erreur identifiée par $message si les deux variables $attendu et $réel n'ont pas le même type et de valeur."

Et comme vous pouvez le voir dans l'exemple ci-dessous l'extrait ci-dessus, ils sont de passage '2204" et 2204, qui échoue à l'aide de assertSame parce que l'on est une chaîne de caractères et un est un int, en gros:

'2204' !== 2204
assertSame('2204', 2204) // this test fails

assertEquals: ", Rapporte une erreur identifiée par $message si les deux variables $attendu et $réel ne sont pas égaux."

assertEquals ne semble pas prendre le type de données en considération, donc, en utilisant l'exemple ci-dessus de 2204:

'2204' == 2204
assertEquals('2204', 2204) // this test passes

J'ai juste couru quelques tests unitaires contre les exemples ci-dessus, et en effet, ils ont entraîné comportement documenté.

21voto

bronze man Points 95
$this->assertEquals(3,true);
$this->assertSame(3,true);

Le premier va passer!

Le second sera un échec.

Les différents

Je pense que vous devriez toujours utiliser assertSame

0voto

Arpan Buch Points 504

assertSame() == Tests que si la production réelle et les paramètres attendus sont les mêmes.

c'est :

$this->assertSame('$expected','$expected');

ou

$this->assertSame('100','100');

assertEquals == Si nous voyons à l'égard d'une page de site web, j'ai une page qui a 2 'de la table' donc, quand je lance assertEquals je vais vérifier son compte que la "table" sont 2 à l'aide d'une fonction de comptage. Par exemple:

$this->assertEquals(2, $var->filter('table')->count()); 

Ici, nous pouvons voir que assertEquals vérifie qu'il y a 2 tables trouvées sur la page web. nous pouvons également utiliser les divisions sur la page en utilisant "#nom de la division de' l'intérieur de la parenthèse.

Ex 2:

public function testAdd()
{
    $calc = new Calculator();

    $result = $calc->add(30, 12);

    // assert that our calculator added the numbers correctly!
    $this->assertEquals(42, $result);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X