【发布时间】:2019-04-06 18:52:40
【问题描述】:
我是使用 PHPUnit 的新手,我正在尝试测试需要从数据库中获取所有任务的函数 getAllTasks()。我尝试了一切,但我只是让我的代码变得更糟。所以请帮我解决这个问题。 TaskTest.php 是我试图进行测试但它不起作用的东西。当然,如果有更好的方法来做某事,我也喜欢学习新东西。这是我的代码:
编辑:我更改了 TaskTest.php 的代码,并设法通过了测试。有人可以告诉我这是测试此功能的好方法,还是有更好的方法?谢谢!
任务.php
<?php
require_once 'Database.php';
class Task {
private $db;
public function __construct() {
$this->db = new Database;
}
public function getAllTasks() {
$this->db->query('SELECT * FROM tasks');
$results = $this->db->resultSet();
return $results;
}
}
数据库.php
<?php
class Database {
private $host = 'localhost';
private $user = 'root';
private $pass = '123456';
private $dbname = 'todolist';
private $dbh;
private $stmt;
private $error;
public function __construct(){
// Set DSN
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
// Create PDO instance
try {
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
} catch(PDOException $e){
$this->error = $e->getMessage();
echo $this->error;
}
}
public function query($sql){
$this->stmt = $this->dbh->prepare($sql);
$this->execute();
}
public function execute(){
return $this->stmt->execute();
}
public function resultSet(){
$this->execute();
return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
TaskTest.php
<?php
require_once './src/Task.php';
require_once './src/Database.php';
use PHPUnit\Framework\TestCase;
class TaskTest extends TestCase {
public function testGetAllTasks() {
$table = array(
array(
'task_id' => '1',
'task_desc' => 'Task One Test'
),
array(
'task_id' => '2',
'task_desc' => 'Task Two Test'
)
);
$dbase = $this->getMockBuilder('Database')
->getMock();
$dbase->method('resultSet')
->will($this->returnValue($table));
$expectedResult = [
'task_id' => '1',
'task_desc' => 'Task One Test',
];
$task = new Task();
$actualResult = $task->getAllTasks();
$this->assertEquals($expectedResult, $actualResult[0]);
}
}
【问题讨论】:
-
我很乐意提供帮助,尤其是在测试方面!但是……到底是什么问题……?
-
@Loek 问题是当我运行测试时它说:调用 1 次时方法名称的期望失败等于“查询”。方法预期调用1次,实际调用0次。