- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我可能没有使用传统意义上的 PHPUnit。我正在使用带有 Selenium 2 的 PHPUnit。我们有这个想法来记录 Selenium 以“重现步骤”的方式执行的操作。这意味着如果我们调用 Selenium 来“单击”或“键入”,则会记录该操作。如果操作失败,它也会被记录下来。我们不会调用断言来设置类型的操作。例如,如果我们正在测试一个查看客户信息的页面,但在我们到达那个页面之前我们需要登录,我们不会断言登录操作,但只在我们必须查看客户信息。
现在当我们最后做一个断言的时候,我们也想记录下结果。我们创建了一个自定义监听器来捕获结果。我们现在遇到的问题是如何将结果发送回我们的 Action 记录器。
我最初是这样运行 PHPUnit 测试的:
class SandboxTest extends PHPUnit_Framework_TestCase { /* tests */ }
$stepTracker = new QA_StepTracker(); // Our custom action recorder
$suite = new PHPUnit_Framework_TestSuite();
$listener = new QA_Listener(); // Our customer listener
$listener->setStepTracker($stepTracker); // Passing the action recorder object to our customer listener
$result = new PHPUnit_Framework_TestResult();
$suite->addTestSuite('SandboxTest');
$result->addListener($listener);
$suite->run($result);
这正如我所期望的那样工作,虽然感觉就像以这种方式运行它我正在失去 phpunit
命令必须提供的很多功能。我想返回使用 phpunit
命令并使用 phpunit.xml
配置文件来定义自定义监听器。
查看 PHPUnit 文档,我注意到您可以在 phpunit.xml
中定义客户监听器时传递参数。
<listeners>
<listener class="MyListener" file="/optional/path/to/MyListener.php">
<arguments>
<array>
<element key="0">
<string>Sebastian</string>
</element>
</array>
<integer>22</integer>
<string>April</string>
<double>19.78</double>
<null/>
<object class="stdClass"/>
</arguments>
</listener>
</listeners>
相当于
$listener = new MyListener(
array('Sebastian'),
22,
'April',
19.78,
NULL,
new stdClass
);
根据示例,看起来我可以传入一个对象...但它将是一个新实例化的对象,而不是预先存在的对象。
此外,如果我们要使用上面的示例,我们将在我们的客户监听器中删除 setStepTracker()
并通过客户监听器的 __construct() 传入 Action 记录器对象
是否可以通过 phpunit.xml
通过自定义监听器传递变量?
我们还将定义一个 Bootstrap 来初始化 Action 记录器。
如果不是,最好的做法是让 Action 记录器对象在 Bootstrap 中成为全局对象,并让自定义监听器以这种方式访问它吗?
最佳答案
由于 phpunit.xml
在 bootstrap.php
之前处理,但监听器是在之后创建的,因此您可以在监听器的构造函数中使用全局变量。
// bootstrap.php
$stepTracker = new QA_StepTracker();
// listener
class QA_Listener implements PHPUnit_Framework_TestListener
{
public function __construct() {
global $stepTracker;
$this->stepTracker = $stepTracker;
...
}
}
更新:已修复以考虑到 bootstrap.php
在创建监听器之前执行。
关于php - 如果 Listener 是在 phpunit.xml 中定义的,是否可以将 PHP 变量传递到 PHPUnit 的自定义 Listener 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8975689/
我可以在所有 PHPUnit 测试完成后自动运行 PHP 脚本吗? 我想在所有测试完成后报告一些非致命问题(即正确但次优的测试结果)。 最佳答案 假设您可以检测到此类次优结果,PHPUnit(v9 及
假设我要测试三种状态下的数据库一致性: 插入数据后 - 我想确保已将一定数量的行插入到数据库表中。 当数据更新后-我想重复行数量测试(数量必须与插入后相同) 删除数据时 - 我想确保所有数据都已删除。
在 pear.phpunit.de/PHPUnit 中安装 PHPUnit 未知 channel pear.phpunit.de 时出错 无效的包名称/包文件 "Debian-4 操作系统上的 pea
谁能给我解释一下使用名为 phpunit.xml.dist 或 phpunit.xml 的 PHPunit 配置文件有什么区别。 official documentation提到两个名字: PHPUn
如果我只想使用来自数据提供者的一个数据运行测试,我该怎么做? 我在这个线程上尝试了解决方案,但没有奏效 Cannot run single test with data provider in PHP
如何编写自定义断言,例如 assertFoo($expected, $actual) ,它的行为类似于关于错误“堆栈跟踪”的内置断言? 我目前定义了以下方法(在扩展 PHPUnit_Framework
我想在我的 Windows 服务器上安装 PHPUnit 3.7。我遵循了各种说明 here并以 PHPUnit 3.4.1 结束。当我尝试使用以下方法再次安装它时: pear update chan
我尝试在 PhpUnit 的 WebTestCase 中发送原始数据,但它不起作用: $jsonEvent = '{ "type": "invoice.payment_succeeded"
我收到了 PHPUnit 错误的代码覆盖率报告,我相信这是 XDebug 的一个错误。 如何配置 PHPUnit 以使用 one of its other drivers ,即PHPDBG? (我使用
我正在我的第一个项目中使用 PHPUnit 进行单元测试。事情进展顺利;但是,我已经开始通过最近的测试获得以下输出: .........................................
我刚刚学习如何使用 PHPUnit。我从命令行运行它,在结果中我得到OK,但是有问题!测试:5,断言:15,警告:2,弃用:5。 我不知道如何让它解释导致弃用和警告计数的原因。 如何找出测试代码中导致
是否有比 $this->assertTrue(false) 更官方的方法来强制 phpunit 失败? 最佳答案 我相信这应该在测试用例中起作用: $this->fail('Message'); 关于
我正在尝试为我的 Silex 应用程序编写一些测试,但遇到了问题。 我有以下 phpunit.xml 文件 ./
目前,我正在尝试使用命令行 phpunittests/Unit/ExampleTest 在 Laravel 项目上使用 phpunit 运行一些简单的单元测试。但它只运行第一种方法。有人有解决办法吗?
我的一些测试用例使用自定义测试库。而且这些测试用例非常慢。所以我想只在构建服务器中运行它们,而不是在我的本地服务器中运行它们。我想在本地运行其他测试。 以下是目录结构。 slow 目录中的那些是应该排
我有以下测试/文件夹: tests/ ClassOne.test.php ClassTwo.test.php ClassThree.test.php 我必须将以下 setUp() 和
我使用 phpunit 的测试套件功能来组织我的测试。我这样做是为了以后能够并行运行测试。 对于不同的目录,这是相对直接的。例如,我可以按捆绑拆分测试套件。 tests/BundleOne
我必须用内部数组测试一个数组。 我的数组如下所示。 $testdata=Array ( [0] => Array ( [
问题:为什么 PHPUnit 似乎在严格模式下运行? 问题: PHPUnit 4.3.1 by Sebastian Bergmann. Configuration read from /full/pa
我已经通过 Composer 安装了 PHPUnit,并将其设置为通过设置运行单元测试。 但是当我运行测试时,测试报告器出现以下错误(tets 执行得很好): Unable to attach tes
我是一名优秀的程序员,十分优秀!