【发布时间】:2013-03-22 23:15:59
【问题描述】:
我是 PHP 单元测试和单元测试的新手。我正在使用 PHP 5.3.8 和 PHPUnit 3.7.18。我有一个简单的数学课和数学测试课:
Math.php
<?php
class Math {
protected $val1;
protected $val2;
public function set_values($val1, $val2) {
$this -> val1 = $val1;
$this -> val2 = $val2;
}
public function get_values() {
return $this -> $val1;
return $this -> $val2;
}
public function add_values() {
$this -> val1 + $this -> val2 = 5;
return 5;
}
}
?>
Math_Test.php
<?php
require_once 'PHPUnit/Autoload.php';
require_once 'Math.php';
class Math_Test extends PHPUnit_Framework_TestCase {
protected $value1;
protected $value2;
public function test_add() {
$math = new Math();
$expected = 7;
$actual = $math -> add_values();
$this -> assertEquals($expected, $actual);
}
protected function set_up() {
$this -> math = new Math();
$this -> math -> setValues(2, 3);
}
protected function tear_down() {
unset($this -> value1);
unset($this -> value2);
}
}
?>
起初我很挣扎,因为我的xampp 安装中有旧版本的 PHPUnit。我经历并升级了 PEAR 和 PHPUnit,并且能够使上述测试正常工作。
让我感到困惑的是,我可以在命令行中运行这个测试并获得预期的结果。但我希望我也可以在浏览器中运行它,这样我就可以这样查看结果。
使用相同的安装,我可以在我的浏览器中正常运行这个类似的测试(这来自..xampp\php\PEAR\PHPUnit.php 的评论部分):
<?php
require_once 'PHPUnit.php';
class MathTest extends PHPUnit_TestCase {
var $fValue1;
var $fValue2;
function MathTest($name) {
$this->PHPUnit_TestCase($name);
}
function setUp() {
$this->fValue1 = 2;
$this->fValue2 = 3;
}
function testAdd() {
$this->assertTrue($this->fValue1 + $this->fValue2 == 5);
}
}
$suite = new PHPUnit_TestSuite();
$suite->addTest(new MathTest('testAdd'));
$result = PHPUnit::run($suite);
print $result->toHTML();
?>
注意使用较新的Auotloader.php 与PHPUnit.php 和PHPUnit_TestCase 与PHPUnit_Framework_TestCase。也许这些版本在我的系统上混合在一起并造成了麻烦?
如何在浏览器中运行较新版本的测试(第一个测试)?我希望我使用测试套件和结果类在 HTML 中运行和显示。我尝试了各种变体,但无济于事。
我尝试在第二个测试中设置打印到浏览器部分,对于第一个测试并收到此错误:
Fatal error: Class 'PHPUnit' not found in...
我确认了 PHPUnit 和我的include_path,一切似乎都正常。另外,测试在终端运行良好...
我已经安装了 VisualPHPUnit,这个工具非常适合那些想要在浏览器中查看可视化测试的人。如果我能解决这个问题,我可能会将注意力转移到让 VisualPHPUnit 为我工作。
我在编写和编辑这个问题时学到了很多东西。感谢您的反馈。
【问题讨论】:
-
您的问题/问题到底是什么?
-
添加到问题...基本上第一次测试会引发错误。我会尽快添加错误。
-
在文档 (phpunit.de/manual/current/en/fixtures.html) 中说您应该使用 setUp() 和 tearDown(),而不是 set_up() 和 tear_down()。除此之外,在您的第二个测试中,您将包含文件 PHPUnit.php。那个文件的内容是什么?我问是因为也许您在 PEAR 中安装了较旧的 PHPUnit,并且当您使测试类从 PHPUnit_Framework_TestCase 继承时使用该版本。在您的第二个测试中,通过包含 PHPUnit.php,您可能正在使用更新的版本
-
第一次测试中没有 toHTML() 调用。您的第一个文件只是一个测试定义,但没有执行任何 php 代码。要获得输出,您需要执行一些操作,就像您在第二个测试中所做的那样: $result = PHPUnit::run($suite);打印 $result->toHTML();
-
是的,一开始就已经尝试过了。我在OQ中提到过。这是问题的一部分。似乎尽管 PHPUnit 的 Framework 目录中存在 TsetSuite 类,但带有 toHTML() 的浏览器版本没有运行。
标签: unit-testing phpunit