Unit testing 使用PHPUnit测试WordPress函数($wpdb)

Unit testing 使用PHPUnit测试WordPress函数($wpdb),unit-testing,phpunit,wordpress,Unit Testing,Phpunit,Wordpress,我正在写一个WordPress主题。有一些后端类通过$wpdb变量(“sqlconnector.php”)与SQL数据库对话。在WordPress主题中,一些页面会包含这个php页面,并创建一个db_connector对象,我可以在其中立即使用global$wpdb sql connector.php: <?php class db_connector { function verify_account($em, $pwd) { global $wpdb; echo

我正在写一个WordPress主题。有一些后端类通过$wpdb变量(“sqlconnector.php”)与SQL数据库对话。在WordPress主题中,一些页面会包含这个php页面,并创建一个
db_connector
对象,我可以在其中立即使用
global$wpdb

sql connector.php

<?php

class db_connector {

function verify_account($em, $pwd) {
    global $wpdb; 

    echo "em = ". $em;
    echo "pwd = ". $pwd; 

    $query = 
        "
        SELECT id
        FROM data_customers
        WHERE email = %s AND password = %s
        ";

    /* customer_id */               
    $result = $wpdb->get_var($wpdb->prepare($query, $em, $pwd));

    echo "empty? = ".!empty($result);

    return $result;
}

}?>
<?php

include("sql-connector.php");

class db_connectorTest extends PHPUnit_Framework_TestCase{
    private $db_connector;

    function testVerify_account() {
        $db_connector = new db_connector();

        $result = $db_connector->verify_account("username@email.com", md5("password"));

        $this->assertEmpty($result);
    }


}

?>
运行PHPUnit时,它只会给出以下结果:

MacBruce:model bruce$ phpunit sql-connectorTest.php
PHPUnit 3.7.22 by Sebastian Bergmann.

em = username@email.compwd = 5f4dcc3b5aa765d61d8327deb882cf99MacBruce:model bruce$ 
当它想使用
$wpdb->get_var(…)
函数时,它似乎卡住了。似乎
$wpdb
是空的

我对PHPUnit和WordPress很陌生。我是否错过了任何WordPress/PHPUnit库?还是我错过了一些我自己的php文件


谢谢。

您需要一个到数据库($wpdb)的活动连接,该连接使用所有凭据进行实例化, 然后在测试中使用它。尽量避免全局变量,在构造函数或setter中传递它


另外,您可能想看看一些现成的wordpress测试工具,如我刚刚设置了PHPUnit&WP。诀窍在于它需要自己安装WordPress源文件和自己的数据库实例,但随后可以设置并拆除测试环境

我使用了以下指南:

一个警告是PHPUnit,这也会破坏数据库连接