XAMPP環境でCakePHPを使いながらPHPunitの導入テストを行っております。
しかし、公式マニュアルを読んでもいまいちテストコードの書き方がわかりません。
例えば公式マニュアル「Example 2.1 PHPUnit での配列操作のテスト」にて下記の通りテストコードが書いてありますが、テスト元のクラス(この場合ですとStackクラス)のコードが書かれていないため何を検証しているのか不明です。
https://phpunit.readthedocs.io/ja/latest/writing-tests-for-phpunit.html#
PHP
1<?php 2use PHPUnit\Framework\TestCase; 3 4class StackTest extends TestCase 5{ 6 public function testPushAndPop() 7 { 8 $stack = []; 9 $this->assertSame(0, count($stack)); 10 11 array_push($stack, 'foo'); 12 $this->assertSame('foo', $stack[count($stack)-1]); 13 $this->assertSame(1, count($stack)); 14 15 $this->assertSame('foo', array_pop($stack)); 16 $this->assertSame(0, count($stack)); 17 } 18}
そこでQiita等の記事を参考に自分で下記の通りサンプルコードを作成しテストを実行しようとしましたがうまくいかない状態です。
手順4のエラーメッセージによるとaftertaxが定義されていないとのことですが、テスト元Class + Testという命名規則でテスト元のClassの定義が引き継がれるものと思っておりましたが違うのでしょうか。
テストコードの書き方が誤っているのでしょうか。ご教示いただけますと幸いです。
【テストの手順】
0. Bake allコマンドを用いてBooksというクラスでMVCファイル及びテストコードのスクリプトを作成
0. Booksコントローラー(Class BooksController)内に下記テスト元コードの関数を追加し消費税込み金額を計算する関数を作成
0. コマンドでtestsディレクトリに自動生成されたBooksControllerTestに下記テストコードを記入し、引数に100を入れると108が返ることをassertSameで検証
0. phpunitを実行するも「Call to undefined function App\Test\TestCase\Controller\aftertax()」と表示される。
【テスト元コード】
PHP
1<?php 2namespace App\Controller; 3 4use App\Controller\AppController; 5 6/** 7 * Books Controller 8 * 9 * @property \App\Model\Table\BooksTable $Books 10 * 11 * @method \App\Model\Entity\Book[]|\Cake\Datasource\ResultSetInterface paginate($object = null, array $settings = []) 12 */ 13class BooksController extends AppController 14{ 15//追加した関数 16public function aftertax($f){ 17 return $f*1.08; 18} 19//以下略 20} 21?>
【テストコード】
PHP
1<?php 2namespace App\Test\TestCase\Controller; 3 4use App\Controller\BooksController; 5use Cake\TestSuite\IntegrationTestCase; 6 7/** 8 * App\Controller\BooksController Test Case 9 */ 10class BooksControllerTest extends IntegrationTestCase 11{ 12 13//追加したテストコード 14 public function testAftertax(){ 15 16 $this->assertSame(108,aftertax(100)); 17 } 18//以下略 19} 20?>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/28 04:16