これは、PHPunit のドキュメントとこの期間中に専門家からの説明を組み合わせたものです。私が学んだ知識を記録し、将来の参考のために補足し、学んだことを改善したいと考えています。
通常、コードをテストするには単一のテストを使用します。会社のビジネスにおいて、彼はあなたの考えが十分に包括的ではないあらゆる小さな箇所を見つけるのを手伝ってくれます。 (ダニエルは、開発は最初に単体テストを書いてから実装コードを書くことができると言っていますが、今はまだそこから遠いと感じています)
スタブ(スタブ):
オブジェクトを(オプションで)に置き換えます。戻り値が設定されたテストダブルを返す方法をスタブと呼びます」 - これは公式ドキュメントにあるスタブの説明です
今見返して初めてわかるのですが、なんて言えばいいのでしょうか?梨を一つ取ってください。
====前提
テストしたいのはこのメソッドです: switchClothes($username) ---- 性別が 1 の場合は名前でデータベースをクエリし、0 の場合はパンツを返します。スカートを返します。
<?php Class Switch{ public function switchClothes($username){ $database=new database(); $gender=$databse->find("id=$username"); if($gender==0){ return "裙子"; }else{ return "裤子"; } } }
データベース クラスをカプセル化しました: find ()
==== テストの作成を開始します
まず最初に、SwitchClothes クラスをテストする必要があります。このカテゴリを通じてインスタンス化する必要があるため、データベース クラスは select メソッドを使用してデータベースにクエリを実行し、パンツとスカートのどちらが必要かを調べます。では、このメソッドのロジックをテストしたいのですが、ユーザー名が存在しない場合は、データベースにアクセスしてデータを作成する必要がありますか?面倒だし十分ではない。データの更新を含むメソッドをテストする必要がある場合、本当にデータを変更する必要がありますか?
半券が豪華に届きました。母はもう私がデータベースを操作していることを心配する必要はありませんし、インターフェイスが理解できないことを心配する必要もありません。
このクラスをスタブできます。もっと簡単に言うと、このクラスと偽のデータベースクラスのシミュレーションだと思います
上記の通り A=switchClothes B=database class D=database C=stub class
A B で呼び出す必要があります。 、B はデータベースにクエリします
ただし、C の存在は、少なくとも A では、C がデータベースをチェックしないように指定できます。いずれにしても、0 または 1 が返されます。これは、C がシステム A を B および D から分離し、結合を軽減することを意味します
その後、必要な C の構築を開始できます。
<?php use PHPUnit\Framework\TestCase; class StubTest extends TestCase { public function testStub() { // 为database类建立桩件。 $stub = $this->getMockBuilder("database")//类名 ->setMethods(array('find')) //可以是多个方法 ->getMock(); // 配置桩件。 $stub->method('find')//想要设置返回值的方法 ->willReturn(0);//设置返回值 // 现在调用 $stub->select() 将返回 '裙子'。 $this->assertEquals('裙子', $stub->find()); } } ?>
Cです。
単一のテストを受ける場合は、赤いパスを選択してください。
全員