2017-07-17 5 views
0

私が取り組んでいるスクールプロジェクトにPHPUnitテスト関数を記述しようとしています。この機能は通常のWebサイトで正常に機能します。しかし、私がPHPUnitでデータベース関連の操作をテストしようとすると、私はmysqli_query(): Couldn't fetch mysqliを得ています。mysqli_query():PHPUnitでPHP関数をテスト中にmysqliを取得できませんでした

PHPUnitのファイル:test.phpを

function testFindById() { 
    $expected_object = "Artist"; 
    $result = Artist::find_by_id($id); 
    $result_type = gettype($result); 
    $this->assertEquals($expected_object, $result_type); 
} 

DatabaseHelperクラス:DatabaseHelper.php

public static function find_by_sql($sql) { 
    global $database; 

    $result = $database->query($sql); 
    $objects = array(); 
    if ($result) { 
     while ($row = mysqli_fetch_array($result)) { 
      $objects[] = static::new_instance($row); 
     } 
    } 
    return $objects; 
}  

public static function find_by_id($id) { 
    global $database; 

    $sql = "SELECT * FROM " . static::$table_name . " WHERE id = $id LIMIT 1"; 
    $result = static::find_by_sql($sql); 
    if (!empty($result)) { 
     return array_shift($result); 
    } else { 
     return false; 
    } 
} 

アーティストクラス:ここ

は、サンプルコードスニペットですArtist.php

class Artist extends DatabaseHelper { 
    protected static table_name = "artists"; 
    // more irrelevant code follows 
} 

テスト出力

C:\Xampp\htdocs\musicstore-oop-beta\test>phpunit --verbose MusicStoreTest.php 
PHPUnit 3.7.21 by Sebastian Bergmann. 

SSE 

Time: 0 seconds, Memory: 2.00Mb 

There was 1 error: 

1) MusicStoreTest::testFindById 
mysqli_query(): Couldn't fetch mysqli 

C:\Xampp\htdocs\musicstore-oop-beta\app\Database.php:38 
C:\Xampp\htdocs\musicstore-oop-beta\app\DatabaseHelper.php:23 
C:\Xampp\htdocs\musicstore-oop-beta\app\DatabaseHelper.php:37 
C:\Xampp\htdocs\musicstore-oop-beta\test\MusicStoreTest.php:62 

There were 2 skipped tests: 

1) MusicStoreTest::testAddArtist 
Artist Add Test Skipped 

C:\Xampp\htdocs\musicstore-oop-beta\test\MusicStoreTest.php:24 

2) MusicStoreTest::testAddAlbum 
Album Add Test Skipped 

C:\Xampp\htdocs\musicstore-oop-beta\test\MusicStoreTest.php:40 

FAILURES! 
Tests: 3, Assertions: 0, Errors: 1, Skipped: 2. 
+0

テストのような音が適切に設定されていません。データベース接続はテストセットアップ内で利用可能ですか? – hakre

答えて

-1

(あなたのケースの$データベース内の)データベース変数のいずれかが接続されているデータベースを参照していない場合に発生します。

$database = new mysqli('db_host','user','password','db_name'); 

if ($database->connect_errno) { 
    error_log("Errno: " . $mysqli->connect_errno . ':' . mysqli->connect_error); 
} 

データベースオブジェクトを格納するために使用する変数がスコープ内にない場合、これがまた発生する可能性があります:あなたは、データベース接続が有効であることを確認する必要があります。 global $database;ステートメントがない場合(ステートメントを持つコードには該当しません)、$databaseはローカル関数スコープのみを持つことになります。グローバル変数$databaseとは異なる変数になります。

関連する問題