第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

PHPUnit 測(cè)試依賴于另一種方法的方法

PHPUnit 測(cè)試依賴于另一種方法的方法

PHP
牧羊人nacy 2022-08-19 10:11:35
這是我的數(shù)據(jù)庫(kù)類,我想測(cè)試返回正確值的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();    }}我最初編寫此單元測(cè)試是為了測(cè)試rowCount方法,但如您所見,我還使用查詢方法來運(yùn)行查詢: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());    }}我認(rèn)為查詢方法將來可能會(huì)有錯(cuò)誤,所以我為什么要依賴它。我寫這個(gè)是為了避免它: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());    }}現(xiàn)在我的問題是:我認(rèn)為這不是一個(gè)好方法,而聲明是私有財(cái)產(chǎn)。在第二次測(cè)試中,我只能測(cè)試rowCount方法,除了我使用了私有財(cái)產(chǎn)之外,我什么都沒有,我認(rèn)為它會(huì)使將來的維護(hù)變得如此困難。哪一個(gè)是正確的?我應(yīng)該用另一種方式測(cè)試它嗎?
查看完整描述

1 回答

?
吃雞游戲

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊

您可以使用@depends它允許您顯式聲明測(cè)試之間的依賴關(guān)系:


class DatabaseTest extends \PHPUnit\Framework\TestCase

{

  /**

   * @test

   */

  public function yourQueryTest()

  {

    // ...

  }



  /**

   * @test

   * @depends yourQueryTest

   */

  public function rowCountReturnsCorrectNumber()

  {

    // ...

  }

}

其中 是 的測(cè)試。yourQueryTest\MyProject\Database\Database#query


查看完整回答
反對(duì) 回復(fù) 2022-08-19
  • 1 回答
  • 0 關(guān)注
  • 98 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)