如何使用 PHPUnit 测试特定方法
How to test specific methods with PHPUnit
我需要有关 PHPUnit 和一些方法的帮助。你们应该如何在 PHPUnit 中编写测试以达到以下属性和方法的高代码覆盖率?
我是 PHPUnit 的新手,可能需要一些帮助。我刚刚为更基本的代码编写了一些测试用例。 class 为最终用户生成即显消息,并将其存储在会话中。
非常感谢您的帮助。有什么想法吗?
private $sessionKey = 'statusMessage';
private $messageTypes = ['info', 'error', 'success', 'warning']; // Message types.
private $session = null;
private $all = null;
public function __construct() {
if(isset($_SESSION[$this->sessionKey])) {
$this->fetch();
}
}
public function fetch() {
$this->all = $_SESSION[$this->sessionKey];
}
public function add($type = 'debug', $message) {
$statusMessage = ['type' => $type, 'message' => $message];
if (is_null($this->all)) {
$this->all = array();
}
array_push($this->all, $statusMessage);
$_SESSION[$this->sessionKey] = $this->all;
}
public function clear() {
$_SESSION[$this->sessionKey] = null;
$this->all = null;
}
public function html() {
$html = null;
if(is_null($this->all))
return $html;
foreach ($this->all as $message) {
$type = $message['type'];
$message = $message['message'];
$html .= "<div class='message-" . $type . "'>" . $message . "</div>";
}
$this->clear();
return $html;
}
我已经设置了一个设置案例,如下所示:
protected function setUp() {
$this->flash = new ClassName();
}
还尝试了一个测试用例:
public function testFetch() {
$this->assertEquals($this->flash->fetch(), "statusMessage", "Wrong session key.");
}
但是收到一条错误消息告诉我:"Undefined variable: _SESSION"
如果我然后尝试:
public function testFetch() {
$_SESSION = array();
$this->assertEquals($this->flash->fetch(), "statusMessage", "Wrong session key.");
}
我收到另一条错误消息:"Undefined index: statusMessage"
尝试这样的事情:
function testWithoutSessionKey() {
$_SESSION = array();
$yourClass = new YourclassName();
$this->assertNull($yourClass->html()); }
function testWithSomeSessionKey() {
$_SESSION = array( 'statusMessage' => array(...));
$yourClass = new YourclassName();
$this->assertSame($expect, $yourClass->html());
}
- 你不能在
setup
中实例化你的 class 因为你的构造函数需要 SESSION 变量可能存在(所以你可以测试它可以在里面有一些值)。
- 您只能评估(断言)方法的输出,因此不能断言方法
fetch
. 的 return 的消息
在您的方法中 testFecth
您发现了一个错误!感谢这个测试。尝试像在构造中一样通过检查来修复它:
public function fetch() {
if (isset($_SESSION[$this->sessionKey]))
$this->all = $_SESSION[$this->sessionKey];
}
希望对您有所帮助
我需要有关 PHPUnit 和一些方法的帮助。你们应该如何在 PHPUnit 中编写测试以达到以下属性和方法的高代码覆盖率?
我是 PHPUnit 的新手,可能需要一些帮助。我刚刚为更基本的代码编写了一些测试用例。 class 为最终用户生成即显消息,并将其存储在会话中。
非常感谢您的帮助。有什么想法吗?
private $sessionKey = 'statusMessage';
private $messageTypes = ['info', 'error', 'success', 'warning']; // Message types.
private $session = null;
private $all = null;
public function __construct() {
if(isset($_SESSION[$this->sessionKey])) {
$this->fetch();
}
}
public function fetch() {
$this->all = $_SESSION[$this->sessionKey];
}
public function add($type = 'debug', $message) {
$statusMessage = ['type' => $type, 'message' => $message];
if (is_null($this->all)) {
$this->all = array();
}
array_push($this->all, $statusMessage);
$_SESSION[$this->sessionKey] = $this->all;
}
public function clear() {
$_SESSION[$this->sessionKey] = null;
$this->all = null;
}
public function html() {
$html = null;
if(is_null($this->all))
return $html;
foreach ($this->all as $message) {
$type = $message['type'];
$message = $message['message'];
$html .= "<div class='message-" . $type . "'>" . $message . "</div>";
}
$this->clear();
return $html;
}
我已经设置了一个设置案例,如下所示:
protected function setUp() {
$this->flash = new ClassName();
}
还尝试了一个测试用例:
public function testFetch() {
$this->assertEquals($this->flash->fetch(), "statusMessage", "Wrong session key.");
}
但是收到一条错误消息告诉我:"Undefined variable: _SESSION" 如果我然后尝试:
public function testFetch() {
$_SESSION = array();
$this->assertEquals($this->flash->fetch(), "statusMessage", "Wrong session key.");
}
我收到另一条错误消息:"Undefined index: statusMessage"
尝试这样的事情:
function testWithoutSessionKey() {
$_SESSION = array();
$yourClass = new YourclassName();
$this->assertNull($yourClass->html()); }
function testWithSomeSessionKey() {
$_SESSION = array( 'statusMessage' => array(...));
$yourClass = new YourclassName();
$this->assertSame($expect, $yourClass->html());
}
- 你不能在
setup
中实例化你的 class 因为你的构造函数需要 SESSION 变量可能存在(所以你可以测试它可以在里面有一些值)。 - 您只能评估(断言)方法的输出,因此不能断言方法
fetch
. 的 return 的消息
在您的方法中 testFecth
您发现了一个错误!感谢这个测试。尝试像在构造中一样通过检查来修复它:
public function fetch() {
if (isset($_SESSION[$this->sessionKey]))
$this->all = $_SESSION[$this->sessionKey];
}
希望对您有所帮助