質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

PHPUnit

PHPUnitは、PHP向けのユニット・テスト向けフレームワークで、手動では手間のかかるテスト作業を自動化し、繰り返し実行することが可能です。

Q&A

解決済

1回答

3992閲覧

DBunitのPHPUnit_Extensions_Database_TestCaseが認識されていない

mizugasira

総合スコア29

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

PHPUnit

PHPUnitは、PHP向けのユニット・テスト向けフレームワークで、手動では手間のかかるテスト作業を自動化し、繰り返し実行することが可能です。

0グッド

0クリップ

投稿2016/11/15 03:24

今PHPUnitのDBUnitを学んでいるところなのですが、
PHPUnit_Extensions_Database_TestCaseを継承させて、xmlファイルから実行させたところ

Fatal error: Class 'PHPUnit_Extensions_Database_TestCase' not found in

クラスがないよということなのでしょうが、DBUnitもインストールしていてコード自体も間違っているとは思えません。

PHP

1<?php 2// テスト対象のクラスを定義 3class Language 4{ 5 protected $db; 6 7 // PDOによるデータベース接続をインスタンス生成時に受け取り、プロパティに保存 8 public function __construct($db) 9 { 10 $this->db = $db; 11 } 12 13 // テスト対象メソッド 14 public function insert($language) 15 { 16 // レコードの追加 17 $sql = 'INSERT INTO example (language) VALUES (:language)'; 18 $prepare = $this->db->prepare($sql); 19 $prepare->bindValue(':language', $language, PDO::PARAM_STR); 20 $prepare->execute(); 21 } 22} 23 24 25?>

PHP

1<?php 2require_once 'Language.php'; 3 4// データベーステスト用のクラスを継承 5class LanguageTest extends PHPUnit_Extensions_Database_TestCase 6{ 7 protected $db; 8 9 // データベースの接続処理 10 protected function getConnection() 11 { 12 if (! $this->db) { 13 $this->db = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 14 } 15 16 return $this->createDefaultDBConnection($this->db); 17 } 18 19 // テストに使用するデータセットを読み込む処理 20 protected function getDataSet() 21 { 22 $dataset = new PHPUnit_Extensions_Database_DataSet_YamlDataSet('LanguageTest_fixture.yaml'); 23 24 return $dataset; 25 } 26 27 // insert()メソッドをテストするメソッド 28 public function testInsertLanguage() 29 { 30 // Languageインスタンスを生成し、insert()メソッドを実行 31 $Language = new Language($this->db); 32 $Language->insert('Lisp'); 33 34 // 行数が6行になっていることを確認 35 $test = $this->getConnection()->getRowCount('example'); 36 $this->assertEquals(6, $test); 37 38 // データ挿入後のデータセットを読み込み 39 //$after_dataset = new PHPUnit_Extensions_Database_DataSet_YamlDataSet('LanguageTest_after_insert.yaml'); 40 41 // ファイルから読み込んだデータセットから、データテーブルを取得 42 $expected = $after_dataset->getTable('example'); 43 44 // データベースから、データ挿入後の実際のテーブルを作成 45 $test = $this->getConnection()->createQueryTable('example', 'SELECT * FROM example'); 46 47 // 2つのデータテーブルを比較 48 $this->assertTableEqual($expected, $test); 49 } 50} 51 52 53?>

下のコードは実行時のxmlファイルです。

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<phpunit> 3 <php> 4 <const name="DB_DSN" value="mysql:host=localhost;dbname=book_db;charset=utf8"/> 5 <count name="DB_USERNAME" value="user"/> 6 <count name="DB_PASSWORD" value="password"/> 7 </php> 8</phpunit>

因みに、下のコードはcomposer.jsonの設定ファイルです。

Json

1{ 2 "require": { 3 "phpunit/phpunit": "4.5.*", 4 "phpunit/dbunit": ">=1.2" 5 } 6}

環境:
MAMP
PHP: version 5.6.10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

vendor/autoload.phpを読み込めていないような気がします。xmlファイルの<phpunit>の行を
<phpunit bootstrap="vendor/autoload.php">とした場合、何か変化はありませんか?
(vendor/autoload.phpとの位置関係が違う場合は記述するパスは変更してください)

投稿2016/11/15 03:37

編集2016/11/15 03:38
nnssn

総合スコア1221

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mizugasira

2016/11/15 04:52

nnssnさん ありがとうございます。phpunitの所に入れたところうまく作動しました。 errorは吐かれているのですがそれは自分のコードミスなので、本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問