Phpunit 无法调用依赖测试用例

Phpunit 无法调用依赖测试用例,phpunit,Phpunit,我正在编写单元测试来测试一个模型类。 首先,我有一个testAddStudent()测试用例,它向数据库添加了一些数据。 然后我有另一个测试用例来检索我刚才添加的记录。 我的代码如下所示: class Model_STest extends PHPUnit_Framework_TestCase { protected $_student; public function setUp() { error_log("Entered setup"); parent::setUp()

我正在编写单元测试来测试一个模型类。 首先,我有一个
testAddStudent()
测试用例,它向数据库添加了一些数据。 然后我有另一个测试用例来检索我刚才添加的记录。 我的代码如下所示:

class Model_STest extends PHPUnit_Framework_TestCase {

protected $_student;

public function setUp() {
    error_log("Entered setup");
    parent::setUp();

    $this->_student = new Application_Model_Student();
}

public function testInit() {
    error_log("Entered testInit");
}

public function testAddStudent() {
    error_log("Entered testAddStudent");
    $testData = array(
            'name' => 'abc',
            'teacher' => 'amyac',
            'start_date' => '2012_08_06'
            );

    $result = $this->_student->addStudent($testData);
    error_log("result is ".print_r($result, true));
    $this->assertGreaterThan(0, $result);
}

/**
 * @depends testAddStudent
 */
public function testGetStudent($result) {
    error_log("Entered testGetStudent, finding student id: $result");
    $resultx = $this->_student->getStudent($result);
    $this->assertEquals($result, $resultx);
    }

}
但是,当我运行phpunit测试(使用命令行)时,日志显示正在搜索的学生id为0。而
testadstudent
将学生id作为非零值返回给我

我做错了什么? 我有

塞巴斯蒂安·伯格曼的PHPUnit 3.6.11

非常感谢您的帮助


谢谢

您应该从
testadstudent()
函数返回
$result

(从dependent-on函数返回的值被传递给dependent函数。)

您也可以考虑使用AppultIsMultudioSube实例进行相同的操作,而不是使用受保护的类变量。下面是重写的示例,以说明这一点。(我使用了一个虚拟应用程序\模型\学生,其成绩刚好足以通过测试。)


另外,请注意我用于
getStudent
以使其通过的实现!我想这不是您打算进行的测试。

您已经为问题提供了正确的解决方案,但我不建议重用模型夹具。每个单元测试应尽可能独立。否则,第一次测试可能会改变模型,从而干扰第二次测试。Darren和@DavidHarkness,感谢您的回复。Darren,我只使用return$result,它将值传递给testGetStudent函数。但是,它会抛出一个错误,说明>Zend_Db_Table_Row Object(…)与预期的类型“string”不匹配。即使模型函数getStudent($result)运行良好,并且可以以Zend_Db_Table_行对象格式获取rec_id,断言也会由于此错误而失败。对于getStudent()函数,我没有真正理解以这种方式实现的动机是什么。现在,我正在设置中创建模型对象,因此每次运行测试用例时,设置都会有一个干净的模型对象。如果您能详细说明为什么当前的实现是错误的,为什么应该以您的方式来实现,那将非常好。再次感谢。@Parminder我更喜欢使用depends机制传递所有依赖数据;您的示例似乎显示了使用depends机制传递一半(result),但使用成员变量传递另一半(student对象)。但也许我误解了你的代码的作用?我假设
Application\u Model\u Student
存储数据。但是,如果它只是数据库连接的句柄,那么就没有必要了。(但在这种情况下,我仍然不会使用
setUp()
;而是将
$student=newapplication\u Model\u student();
行移到每个需要它的函数中。只是为了代码清晰。@DarrenCook-我猜
Application\u Model\u student
作为一个函数运行。
class Application_Model_Student{
private $d;
function addStudent($d){$this->d=$d;return 1;}
function getStudent($ix){return $ix;}
}

//----------------------
class Model_STest extends PHPUnit_Framework_TestCase {

public function testAddStudent() {
    error_log("Entered testAddStudent");

    $testData = array(
            'name' => 'abc',
            'teacher' => 'amyac',
            'start_date' => '2012_08_06'
            );

    $student = new Application_Model_Student();
    $result = $student->addStudent($testData);
    error_log("result is ".print_r($result, true));
    $this->assertGreaterThan(0, $result);
    return array($student,$result);
}

/**
 * @depends testAddStudent
 */
public function testGetStudent($data) {
    list($student,$result)=$data;
    error_log("Entered testGetStudent, finding student id: $result");
    $resultx = $student->getStudent($result);
    $this->assertEquals($result, $resultx);
    }

}