在 Laravel 中进行基于 phpUnit 的单元测试时,我发现了两种测试作业是否被调度的方法 -
1.
$this->expectsJobs(JobClassName::class);
2.
Bus::fake();
Bus::assertDispatched(JobClassName::class);
Run Code Online (Sandbox Code Playgroud)
在仔细检查 Laravel 文档后,我无法弄清楚上述哪一种方法是更好的方法以及这两种方法之间的功能差异是什么。
存在被焚烧的风险......在上下文隐含的上下文中,强制执行对方法而不是函数的调用有什么优势.
考虑到PHP的语法对于调用方法来说是如此丑陋,为什么PHPUnit的创建者会强制使用它?
如果框架设置了一个全局"currentTestCase"对象,然后透明地将失败的断言与该对象相关联,那么我们可以编写:
assertEquals("blah", $text);
Run Code Online (Sandbox Code Playgroud)
而不是等同的,但冗长的:
$this->assertEquals("blah", $text);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们通过使用OO到底得到了什么.
请赐教.
我使用本指南安装了梨子http://t-machine.org/index.php/2008/12/28/how-to-install-pear-on-os-x-105/
在/etc/php.ini中我的include_path =".:/ usr/local/PEAR"
PHPUnit 使用sudo pear install phpunit/PHPUnit安装在/ usr/local/PEAR / PHPUnit下(否则我会收到错误)
然而,当我尝试执行phpunit时,我收到此错误
Warning: require_once(PHPUnit/Util/Filter.php): failed to open stream: Not a directory in /usr/local/bin/phpunit on line 44
Fatal error: require_once(): Failed opening required 'PHPUnit/Util/Filter.php' (include_path='.:') in /usr/local/bin/phpunit on line 44
Run Code Online (Sandbox Code Playgroud)
我只是想知道有没有人知道问题是什么或安装梨osx的完整(和正确的指南).
谢谢!
谈论在第一个障碍下跌.我的测试脚本:
<?php
require_once('PHPUnit/Framework.php');
class TransferResponseTest extends PHPUnit_TestCase {
...
}
Run Code Online (Sandbox Code Playgroud)
运行我的测试用例:
$ phpunit TransferResponseTest
Fatal error: Class 'PHPUnit_TestCase' not found in
/Volumes/Data/greg/code/syndicate/tests/TransferResponseTest.php on line 5
$ php -i | grep include_path
include_path => .:/usr/lib/php => .:/usr/lib/php
$ ls -l /usr/lib/php/PHPUnit/
total 8
drwxr-xr-x 16 root wheel 544 27 Mar 19:03 Extensions
drwxr-xr-x 28 root wheel 952 27 Mar 19:03 Framework
-rw-r--r-- 1 root wheel 3193 27 Mar 19:03 Framework.php
drwxr-xr-x 8 root wheel 272 27 Mar 19:03 Runner
drwxr-xr-x 5 …Run Code Online (Sandbox Code Playgroud) 所以我有很多PHPUnit测试(它们实际上是作为PHPUnit测试运行的Selenium测试).当我从命令行运行它们时,我会在测试完成时得到这种报告:
..E..F..E.FF...
Run Code Online (Sandbox Code Playgroud)
然后我必须等到所有测试完成后再告诉我错误和失败.我希望能够控制这一点,以便我可以做一些更有用的报告.例如:
testLogin ....... passed
testFoobar ...... failed
- Failed asserting that foo = true on line 123
testBazbat ...... passed
Run Code Online (Sandbox Code Playgroud)
如何控制PHPUnit如何显示结果?
我正在使用yii框架并尝试在CentOS服务器上通过ssh连接时运行其单元测试.当我运行phpunit时,它会尝试启动Firefox,但失败并显示错误"no display specifiedi"
我正在构建一个测试脚本,它正在检查一组命令的性能.在测试失败之前,测试脚本需要让它运行一段特定的时间.
我在PHPUnit文档网站上找到了PerformanceTestCase,但是当我尝试使用它时,我发现它的旧功能尚未包含在新版本中.(该文档是PHPUnit 3.0,我的版本是3.5).
PHPUnit 3.5中是否存在此功能的等效物,我该如何使用它?
即使我已经包含了TestCase类?
<?php
require_once("PHPUnit/Autoload.php");
require_once("PHPUnit/Framework/TestCase.php");
require_once("PHPUnit/Framework/TestSuite.php");
class WidgetSession {
public function __construct($one, $two){}
public function login() {}
public function isLoggedIn() {return null;}
public function getUser(){
return new WidgetUser();
}
}
class WidgetUser{
public $first_name = "";
public $last_name = "";
public $email = "";
public function isSalesPerson() {return null;}
public function isSalesManager() {return null;}
}
class TestWidgetSession extends TestCase {
private $_session;
function setUp(){
$dsn = array(
'phptype' => "pgsql",
'hostspec' => "localhost",
'database' => "widgetworld",
'username' => "wuser",
'password' => …Run Code Online (Sandbox Code Playgroud) 我正在使用SOAP 连接到第三方服务.此服务有时会返回SoapFaults.因为这是预期的,我想通过模拟SoapFaults来测试它.它将返回五种标准的SoapFaults.
这是一个真正的SoapFault的开始:
object(SoapFault)#7 (11) {
["message":protected]=>
string(19) "{ 'INVALID_INPUT' }"
Run Code Online (Sandbox Code Playgroud)
我对此消息感兴趣.在我的代码中,我使用$ e-> getMessage().
catch (SoapFault $e)
{
// Catch any Soap faults and convert to an error message
switch ($e->getMessage())
{
case "{ 'INVALID_INPUT' }":
$this->addError(self::INVALID_INPUT);
return FALSE;
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何模拟SoapClient响应.SoapClient对象似乎没有接受任何输入来设置消息,并且该方法getMessage()是最终的,所以我无法模拟它.
任何想法,将不胜感激.谢谢.