Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitbdacf53

Browse files
committed
feature#6388 Added the docs for the @dns-sensitive mocks (javiereguiluz)
This PR was squashed before being merged into the master branch (closes#6388).Discussion----------Added the docs for the @dns-sensitive mocksThisfixes#6379.Commits-------b736bdb Added the docs for the @dns-sensitive mocks
2 parents5f8124b +b736bdb commitbdacf53

File tree

1 file changed

+96
-16
lines changed

1 file changed

+96
-16
lines changed

‎components/phpunit_bridge.rst

Lines changed: 96 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -114,13 +114,13 @@ message contains the ``"foobar"`` string.
114114
Making Tests Fail
115115
-----------------
116116

117-
By default, any non-legacy-tagged or any non-`@-silenced`_ deprecation notices will
118-
make tests fail. Alternatively, setting ``SYMFONY_DEPRECATIONS_HELPER`` to an
119-
arbitrary value (ex: ``320``) will make the tests fails only if a higher number
120-
of deprecation notices is reached (``0`` is the default value). You can also set
121-
the value ``"weak"`` which will make the bridge ignore any deprecation notices.
122-
This is useful to projects that must use deprecated interfaces for backward
123-
compatibility reasons.
117+
By default, any non-legacy-tagged or any non-`@-silenced`_ deprecation notices
118+
willmake tests fail. Alternatively, setting ``SYMFONY_DEPRECATIONS_HELPER`` to
119+
anarbitrary value (ex: ``320``) will make the tests fails only if a higher
120+
numberof deprecation notices is reached (``0`` is the default value). You can
121+
also setthe value ``"weak"`` which will make the bridge ignore any deprecation
122+
notices.This is useful to projects that must use deprecated interfaces for
123+
backwardcompatibility reasons.
124124

125125
Time-sensitive Tests
126126
--------------------
@@ -171,7 +171,7 @@ To use the ``ClockMock`` class in your test, you can:
171171
``ClockMock::withClockMock(true)`` before the test and
172172
``ClockMock::withClockMock(false)`` after the test.
173173

174-
As a result, the following isguarenteed to work and is no longer a transient
174+
As a result, the following isguaranteed to work and is no longer a transient
175175
test::
176176

177177
use Symfony\Component\Stopwatch\Stopwatch;
@@ -203,17 +203,97 @@ And that's all!
203203
advances the internal clock the given number of seconds without actually
204204
waiting that time, so your test will execute 10 seconds faster.
205205

206+
DNS-sensitive Tests
207+
-------------------
208+
209+
..versionadded::3.1
210+
The mocks for DNS related functions were introduced in Symfony 3.1.
211+
212+
Tests that make network connections, for example to check the validity of a DNS
213+
record, can be slow to execute and unreliable due to the conditions of the
214+
network. For that reason, this component also provides mocks for these PHP
215+
functions:
216+
217+
*:phpfunction:`checkdnsrr()`
218+
*:phpfunction:`dns_check_record()`
219+
*:phpfunction:`getmxrr()`
220+
*:phpfunction:`dns_get_mx()`
221+
*:phpfunction:`gethostbyaddr()`
222+
*:phpfunction:`gethostbyname()`
223+
*:phpfunction:`gethostbynamel()`
224+
*:phpfunction:`dns_get_record()`
225+
226+
Use Case
227+
~~~~~~~~
228+
229+
Consider the following example that uses the ``checkMX`` option of the ``Email``
230+
constraint to test the validity of the email domain::
231+
232+
use Symfony\Component\Validator\Constraints\Email;
233+
234+
class MyTest extends \PHPUnit_Framework_TestCase
235+
{
236+
public function testEmail()
237+
{
238+
$validator = ...
239+
$constraint = new Email(array('checkMX' => true));
240+
241+
$result = $validator->validate('foo@example.com', $constraint);
242+
243+
// ...
244+
}
245+
246+
In order to avoid making a real network connection, add the ``@dns-sensitive``
247+
annotation to the class and use the ``DnsMock::withMockedHosts()`` to configure
248+
the data you expect to get for the given hosts::
249+
250+
use Symfony\Component\Validator\Constraints\Email;
251+
252+
/**
253+
* @group dns-sensitive
254+
*/
255+
class MyTest extends \PHPUnit_Framework_TestCase
256+
{
257+
public function testEmails()
258+
{
259+
DnsMock::withMockedHosts(array('example.com' => array(array('type' => 'MX'))));
260+
261+
$validator = ...
262+
$constraint = new Email(array('checkMX' => true));
263+
264+
$result = $validator->validate('foo@example.com', $constraint);
265+
266+
// ...
267+
}
268+
269+
The ``withMockedHosts()`` method can return any number of hosts with different
270+
configuration, so you can simulate diverse network conditions::
271+
272+
DnsMock::withMockedHosts(array(
273+
'example.com' => array(
274+
array(
275+
'type' => 'A',
276+
'ip' => '1.2.3.4',
277+
),
278+
array(
279+
'type' => 'AAAA',
280+
'ipv6' => '::12',
281+
),
282+
),
283+
));
284+
206285
Troubleshooting
207-
~~~~~~~~~~~~~~~
286+
---------------
208287

209-
The ``@group time-sensitive`` works "by convention" and assumes that the
210-
namespace of the tested class can be obtained just by removing the ``\Tests\``
211-
part from the test namespace. I.e. that if the your test case fully-qualified
212-
class name (FQCN) is ``App\Tests\Watch\DummyWatchTest``, it assumes the tested
213-
class FQCN is ``App\Watch\DummyWatch``.
288+
The ``@group time-sensitive`` and ``@group dns-sensitive`` annotations work
289+
"by convention" and assume that the namespace of the tested class can be
290+
obtained just by removing the ``\Tests\`` part from the test namespace. For
291+
example, if your test case fully-qualified class name (FQCN) is
292+
``App\Tests\Watch\DummyWatchTest``, it assumes the tested class FQCN is
293+
``App\Watch\DummyWatch``.
214294

215-
If this convention doesn't work for your application,you can also configure
216-
the mockednamespaces in the ``phpunit.xml`` file, as done for example in the
295+
If this convention doesn't work for your application,configure the mocked
296+
namespaces in the ``phpunit.xml`` file, as done for example in the
217297
:doc:`HttpKernel Component</components/http_kernel/introduction>`:
218298

219299
..code-block::xml

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp