13
13
<para >
14
14
<indexterm ><primary >Système à tester</primary ></indexterm >
15
15
16
- Parfois il est juste parfaitement difficile de tester un système en cours de test
16
+ Parfois il est parfaitement difficile de juste tester un système en cours de test
17
17
(SCT) parce qu'il dépend d'autres composants qui ne peuvent pas
18
18
être utilisés dans l'environnement de test. Ceci peut provenir du fait
19
19
qu'ils ne sont pas disponibles, qu'ils ne retournent pas les résultats
45
45
</para >
46
46
47
47
<para >
48
-
49
48
La méthode <literal >createMock($type)</literal > retourne immédiatement une doublure de
50
49
test pour le type spécifié (interface ou classe). La création de cette doublure est
51
50
effectuée en suivant par défaut les bonne pratiques (les méthodes <literal >__construct()
52
51
</literal > et <literal >__clone()</literal > de la classe originale ne sont pas executées
53
52
et les arguments passés à une méthode de la doublure de tests ne sont pas clonés. Si ce
54
53
comportement par défaut ne correspondent pas à ce don vous avez besoin vous pouvez
55
54
alors utiliser la méthode <literal >getMockBuilder($type)</literal > pour personnaliser la
56
- génération de doublure de test en utilisant un chaînage de méthode (fluent interface).
55
+ génération de doublure de test en utilisant un interface souple (fluent interface).
57
56
</para >
58
57
59
58
<para >
60
- Par défaut, toutes les méthodes de la classe originelle sont remplacées
61
- par une implémentation fictive qui se contente de retourner
62
- <literal >NULL</literal > (sans appeler la méthode originelle).
63
- En utilisant la méthode <literal >will($this->returnValue())</literal >
59
+ Par défaut, toutes les méthodes de la classe originelle sont remplacées par une
60
+ implémentation fictive qui se contente de retourner <literal >NULL</literal > (sans
61
+ appeler la méthode originelle). En utilisant la méthode <literal >will($this->returnValue())</literal >
64
62
par exemple, vous pouvez configurer ces implémentations fictives pour
65
63
retourner une valeur donnée quand elles sont appelées.
66
64
</para >
67
65
68
66
<note >
69
- <title >Limitations</title >
67
+ <title >Limitations: méthodes final, private et static </title >
70
68
71
69
<para >
72
70
Merci de noter que les méthodes <literal >final</literal >, <literal >private</literal >
73
- et <literal >static</literal > ne peuvent pas être remplacées par un bouchon (stub) ou un simulacre (mock). Elles seront
74
- ignorées par la fonction de doublure de test de PHPUnit et conserveront leur comportement
75
- initial.
71
+ et <literal >static</literal > ne peuvent pas être remplacées par un bouchon (stub) ou un simulacre (mock).
72
+ Elles seront ignorées par la fonction de doublure de test de PHPUnit et conserveront
73
+ leur comportement initial.
76
74
</para >
77
75
</note >
78
76
96
94
97
95
<xref linkend =" test-doubles.stubs.examples.StubTest.php" /> montre comment
98
96
la méthode de bouchonnage appelle et configure des valeurs de retour. Nous utilisons
99
- d'abord la méthode <literal >getMock ()</literal > qui est fournie par la classe
100
- <literal >PHPUnit_Framework_TestCase </literal > pour configurer un objet bouchon
101
- qui ressemble à un objet de <literal >UneClasse </literal >
97
+ d'abord la méthode <literal >createMock ()</literal > qui est fournie par la classe
98
+ <literal >PHPUnit\Framework\TestCase </literal > pour configurer un objet bouchon
99
+ qui ressemble à un objet de <literal >SomeClass </literal >
102
100
(<xref linkend =" test-doubles.stubs.examples.SomeClass.php" />). Ensuite nous
103
101
utilisons <ulink url =" http://martinfowler.com/bliki/FluentInterface.html" >l'interface souple</ulink >
104
- que PHPUnit fournit pour indiquer le comportement de ce bouchon. En essence ,
102
+ que PHPUnit fournit pour indiquer le comportement de ce bouchon. En substance ,
105
103
cela signifie que vous n'avez pas besoin de créer plusieurs objets temporaires
106
104
et les relier ensemble ensuite. Au lieu de cela, vous chaînez les appels de méthode
107
105
comme montré dans l'exemple. Ceci amène à un code plus lisible et "souple".
110
108
<example id =" test-doubles.stubs.examples.SomeClass.php" >
111
109
<title >La classe que nous voulons bouchonner</title >
112
110
<programlisting ><![CDATA[ <?php
113
- class UneClasse
111
+ class SomeClass
114
112
{
115
- public function faireQuelquechose ()
113
+ public function doSomething ()
116
114
{
117
115
// Faire quelque chose.
118
116
}
@@ -121,30 +119,27 @@ class UneClasse
121
119
</example >
122
120
123
121
<example id =" test-doubles.stubs.examples.StubTest.php" >
124
- <indexterm ><primary >getMock()</primary ></indexterm >
125
- <indexterm ><primary >expects()</primary ></indexterm >
122
+ <indexterm ><primary >createMock()</primary ></indexterm >
126
123
<indexterm ><primary >method()</primary ></indexterm >
127
- <indexterm ><primary >will()</primary ></indexterm >
128
- <indexterm ><primary >returnValue()</primary ></indexterm >
124
+ <indexterm ><primary >willReturn()</primary ></indexterm >
129
125
<title >Bouchonner un appel de méthode pour retourner une valeur fixée</title >
130
126
<programlisting ><![CDATA[ <?php
131
- require_once 'UneClasse.php' ;
127
+ use PHPUnit\Framework\TestCase ;
132
128
133
- class BouchonTest extends PHPUnit_Framework_TestCase
129
+ class StubTest extends TestCase
134
130
{
135
131
public function testBouchon()
136
132
{
137
133
// Créer un bouchon pour la classe UneClasse.
138
- $bouchon = $this->getMock('UneClasse' );
134
+ $stub = $this->createMock(SomeClass::class );
139
135
140
136
// Configurer le bouchon.
141
- $bouchon->expects($this->any())
142
- ->method('faireQuelquechose')
143
- ->will($this->returnValue('foo'));
137
+ $stub->method('doSomething')
138
+ ->willReturn('foo');
144
139
145
- // Appeler $bouchon->faireQuelquechose () va maintenant retourner
140
+ // Appeler $stub->doSomething () va maintenant retourner
146
141
// 'foo'.
147
- $this->assertEquals('foo', $bouchon->faireQuelquechose ());
142
+ $this->assertEquals('foo', $stub->doSomething ());
148
143
}
149
144
}
150
145
?>]]> </programlisting >
0 commit comments