這是我的數(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
- 1 回答
- 0 關(guān)注
- 98 瀏覽
添加回答
舉報(bào)
0/150
提交
取消