Skip to content

Commit 63c0569

Browse files
committed
Merge pull request #326 from gyohk/best_practices/tests
WIP: [best practice] Tests 翻訳
2 parents 90b8d6e + e4d42dc commit 63c0569

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed

best_practices/tests.rst

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
テスト
2+
=====
3+
4+
大まかに言うと、テストには2つの種類が存在します。ユニットテストは、特定の関数の入力と出力をテストすることができます。機能テストは、あなたが閲覧するサイト上のページに対して "ブラウザ" を制御し、リンクをクリックしたり、フォームに記入を行ったり、ページ上の特定の物事を確認することができます。
5+
6+
ユニットテスト
7+
----------
8+
9+
ユニットテストは、Symfonyから独立したクラス内に存在すべき、あなたの "ビジネスロジック" をテストするために使用されます。この理由により、Symfonyは実際のところ、ユニットテストのためにあなたがどのツールを使用するかについて意見を持ちません。しかしながら、最もポピュラーなツールは `PhpUnit`_ と `PhpSpec`_ です。
10+
11+
機能テスト
12+
----------
13+
14+
真に優れた機能テストを作成することは困難であるため、一部の開発者は完全にこれを省略します。機能テストを省略しないでください!いくつかの *シンプルな* 機能テストを定義することで、いかなる大きなエラーであれ、それらをデプロイしてしまう前にすばやく発見できます。
15+
16+
.. best-practice::
17+
18+
機能テストを定義することは、結局のところあなたのアプリケーションのページが正常にロードにされるかどうかチェックすることです。
19+
20+
機能テストは以下の例のように簡単です:
21+
22+
.. code-block:: php
23+
24+
/** @dataProvider provideUrls */
25+
public function testPageIsSuccessful($url)
26+
{
27+
$client = self::createClient();
28+
$client->request('GET', $url);
29+
30+
$this->assertTrue($client->getResponse()->isSuccessful());
31+
}
32+
33+
public function provideUrls()
34+
{
35+
return array(
36+
array('/'),
37+
array('/posts'),
38+
array('/post/fixture-post-1'),
39+
array('/blog/category/fixture-category'),
40+
array('/archives'),
41+
// ...
42+
);
43+
}
44+
45+
このコードは全ての与えられたURLが正しくロードできることをチェックし、それは各HTTPレスポンスのステータスコードが ``200`` から ``299`` の間であることを意味します。
46+
これは有用に見えないかもしれませんが、かかる労力がいかに少ないかを考慮すると、あなたのアプリケーションで行う価値があります。
47+
48+
コンピュータソフトウェアにおいて、この種のテストは `smoke testing`_ と呼ばれ、 *「将来のソフトウェアリリースを退けるほど深刻な、単純な失敗を発見にするための予備的なテスト」* で構成されます。
49+
50+
機能テスト内のハードコードされたURL
51+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
52+
53+
皆さんのうち一部の方は何故、上記の機能テストがURLジェネレータサービスを使用していないのかを尋ねるかもしれません:
54+
55+
.. best-practice::
56+
機能テストにおいては、URLジェネレータを使用する代わりに、URLのハードコードが使用されます。
57+
58+
テストページのURLを生成するために ``router`` サービスを使用した、以下の機能テストについて考えてみましょう。
59+
60+
.. code-block:: php
61+
62+
public function testBlogArchives()
63+
{
64+
$client = self::createClient();
65+
$url = $client->getContainer()->get('router')->generate('blog_archives');
66+
$client->request('GET', $url);
67+
68+
// ...
69+
}
70+
71+
これは動作するでしょうが、一つ大きな欠点があります。もし開発者が ``blog_archives`` ルートのパスを誤って変更した場合、テストは未だ成功しますが、元の(古い)URLは動作しなくなるでしょう!これは、そのURLに対する全てのブックマークが壊れ、あなたが全ての検索エンジンのページランキングを失うことを意味します。
72+
73+
JavaScriptの機能テスト
74+
~~~~~~~~~~~~~~~~~~~~~~
75+
76+
組み込みの機能テストクライアントは素晴らしいですが、それをあなたのページで、任意のJavaScriptの振る舞いをテストするために使用することはできません。もしあなたがこのテストを行う必要がある場合、PHPUnitの内部から、 `Mink`_ ライブラリを使用することを検討してください。
77+
78+
もちろん、もしもあなたが大規模なJavaScriptフロントエンドを使用している場合、純粋なJavaScriptベースのテストツールを検討すべきです。
79+
80+
機能テストについてさらに学ぶ
81+
~~~~~~~~~~~~~~~~~~~~~~~~~~
82+
83+
`Faker`_ と `Alice`_ ライブラリを使用して、あなたのテストフィクスチャのため実運用に近いデータを生成することを検討してください。
84+
85+
86+
.. _`Faker`: https://github.com/fzaninotto/Faker
87+
.. _`Alice`: https://github.com/nelmio/alice
88+
.. _`PhpUnit`: https://phpunit.de/
89+
.. _`PhpSpec`: http://www.phpspec.net/
90+
.. _`Mink`: http://mink.behat.org
91+
.. _`smoke testing`: http://en.wikipedia.org/wiki/Smoke_testing_(software)

0 commit comments

Comments
 (0)