2

Modelクラスをテストするための単体テストを書いています。まずtestAddStudent()、dbにデータを追加するテストケースがあります。次に、追加したばかりのレコードを取得するための別のテストケースがあります。私が持っているコードは次のようになります:

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であることが示されます。一方、testAddStudentは、学生IDをゼロ以外の値として返します。

私は何が間違っているのですか?私は持っています

PHPUnit 3.6.11 bySebastianBergmann。

どんな助けでも大歓迎です。

ありがとう!

4

1 に答える 1

2

$result関数から戻る必要がありますtestAddStudent()

(依存先関数からの戻り値は、依存先関数に渡されます。)

保護されたクラス変数を使用する代わりに、Application_Model_Student インスタンスで同じことを行うことも検討してください。これを示すために書き直した例を次に示します。(テストに合格するのに十分なダミーの Application_Model_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);
    }

}

PS私getStudentがそれを通過させるために使用した実装に注意してください! これはあなたが意図したテストではないと思います。

于 2012-08-07T00:28:26.713 に答える