この記事は、PHP と laravel フレームワークをある程度理解し、laravel の紹介ビデオ「Laravel 5 Fundamentals」を視聴した初心者に適しています。この記事では主に、単体テスト ツールを使用してアプリケーションをテストする方法について説明します。
関連ビデオ laravel テストがネットワーク ディスクにダウンロードされました。まだ見ていない場合は、まずダウンロードして見てください:
1. testing ディレクトリに、新しいテスト ファイル OrderTest.php を作成します。
<?php use App\Product;use App\Order; class ProductTest extends PHPUnit_Framework_TestCase { /** @test */ function an_order_consists_of_products() { $order = new Order; $product = new Product('Fallout4',59); $product2 = new Product('Pillowcase',7); $order->add($product); $order->add($product2); $this->assertEquals(2,count($order->products())); } }
App ディレクトリに Order.php ファイルを作成します
<?php namespace App; class Order{ protected $products = []; public function add(Product $product) { $this->products[] = $product; } public function products() { return $this->products; }}
assertCount() メソッドを使用するようにコードの最後の行を最適化します。
<?php use App\Product;use App\Order; class ProductTest extends PHPUnit_Framework_TestCase { /** @test */ function an_order_consists_of_products() { $order = new Order; $product = new Product('Fallout4',59); $product2 = new Product('Pillowcase',7); $order->add($product); $order->add($product2); $this->assertCount(2,$order->products()); } }
次のコマンドを入力します: phpunit testing/unit test
2. 合計注文金額をテストします。
コマンドを入力します: phpunit --filter an_order_can_determine_the_total_cost_of_all_its_products1 つのメソッドのみをテストします
<?php use App\Product;use App\Order; class ProductTest extends PHPUnit_Framework_TestCase { /** @test */ function an_order_consists_of_products() { $order = new Order; $product = new Product('Fallout4',59); $product2 = new Product('Pillowcase',7); $order->add($product); $order->add($product2); $this->assertCount(2,$order->products()); } /** @test */ function an_order_can_determine_the_total_cost_of_all_its_products() { $order = new Order; $product = new Product('Fallout4',59); $product2 = new Product('Pillowcase',7); $order->add($product); $order->add($product2); $this->assertEquals(66,$order->total()); }}
テストファイル Order.php
<?php namespace App; class Order{ protected $products = []; public function add(Product $product) { $this->products[] = $product; } public function products() { return $this->products; } public function total() { total = 0; foreach($this->productsas $product){ $total += $product->cost(); } return $total; }}
テストに合格します
コードを簡素化するには、createOrderWithProducts() メソッドを使用します。
<?php use App\Product;use App\Order; class ProductTest extends PHPUnit_Framework_TestCase { /** @test */ function an_order_consists_of_products() { $order = $this->createOrderWithProducts(); $this->assertCount(2,$order->products()); } /** @test */ function an_order_can_determine_the_total_cost_of_all_its_products() { $order = $this->createOrderWithProducts(); $this->assertEquals(66,$order->total()); } protected function createOrderWithProducts() { $order = new Order; $product = new Product('Fallout4',59); $product2 = new Product('Pillowcase',7); $order->add($product); $order->add($product2); return $order; }}
この記事では Order クラスを少し詳しくテストしましたが、後ほど詳しく説明します。