亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHPUnit 測試依賴于另一種方法的方法

PHPUnit 測試依賴于另一種方法的方法

PHP
牧羊人nacy 2022-08-19 10:11:35
這是我的數據庫類,我想測試返回正確值的rowCount方法:namespace MyProject\Database;class Database {    // database connection    private $conn = NULL;    // holds query statement object    private $statement = NULL;    public function __construct(\PDO $conn) {        $this->conn = $conn;    }    public function query(string $query, array $parameters=[]) : bool {        $this->statement = $this->conn->prepare($query);        return $this->statement->execute($parameters);    }    public function rowCount() : int {        return $this->statement->rowCount();    }}我最初編寫此單元測試是為了測試rowCount方法,但如您所見,我還使用查詢方法來運行查詢:class DatabaseTest extends \PHPUnit\Framework\TestCase {    /** @test */    public function rowCountReturnsCorrectNumber() {        $pdo = new \PDO('sqlite::memory:');        $db = new \MyProject\Database\Database($pdo);        // we are not testing query method here but we use it to run the query        $db->query("CREATE TABLE test (id INT UNSIGNED PRIMARY KEY)");        $db->query("INSERT INTO test (id) VALUES (1),(2)");        $this->assertEquals(2,$db->rowCount());    }}我認為查詢方法將來可能會有錯誤,所以我為什么要依賴它。我寫這個是為了避免它:class DatabaseTest extends \PHPUnit\Framework\TestCase {    /** @test */    public function rowCountReturnsCorrectNumber() {        $pdo = new \PDO('sqlite::memory:');        $db = new \MyProject\Database\Database($pdo);        $s = $pdo->prepare("CREATE TABLE test (id INT UNSIGNED PRIMARY KEY)");        $s->execute();        $s2 = $pdo->prepare("INSERT INTO test (id) VALUES (1),(2)");        $s2->execute();        // here I set statement (private property)        $reflection = new \ReflectionClass($db);        $property = $reflection->getProperty('statement');        $property->setAccessible(true);        $property->setValue($db, $s2);        $this->assertEquals(2,$db->rowCount());    }}現在我的問題是:我認為這不是一個好方法,而聲明是私有財產。在第二次測試中,我只能測試rowCount方法,除了我使用了私有財產之外,我什么都沒有,我認為它會使將來的維護變得如此困難。哪一個是正確的?我應該用另一種方式測試它嗎?
查看完整描述

1 回答

?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

您可以使用@depends它允許您顯式聲明測試之間的依賴關系:


class DatabaseTest extends \PHPUnit\Framework\TestCase

{

  /**

   * @test

   */

  public function yourQueryTest()

  {

    // ...

  }



  /**

   * @test

   * @depends yourQueryTest

   */

  public function rowCountReturnsCorrectNumber()

  {

    // ...

  }

}

其中 是 的測試。yourQueryTest\MyProject\Database\Database#query


查看完整回答
反對 回復 2022-08-19
  • 1 回答
  • 0 關注
  • 99 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號