我肯定错过了什么.我正在尝试在PHPUnit中的类上存根方法,但是当我在模拟对象上调用该方法时,它告诉我该方法是未定义的.
存根示例类:
namespace MyApp;
class MyStubClass
{
public function mrMethod()
{
// doing stuff
}
}
Run Code Online (Sandbox Code Playgroud)
为了存根,我写道:
// specifying all getMock() args to disable calling of class __construct()
$stub = $this->getMock('MyStubClass', array(), array(), 'MockMyStubClass', false, false, false);
$stub->expects($this->any())
->method('mrMethod')
->will($this->returnValue('doing stuff'));
Run Code Online (Sandbox Code Playgroud)
但是在调用stubbed方法时,我得到一个异常:
$stub->mrMethod();
//PHP Fatal error: Call to undefined method MockMyStubClass::mrMethod()
Run Code Online (Sandbox Code Playgroud)
我在PHP 5.3.0中使用PHPUnit 3.4.3.
我注意到的另一个小问题是,如果在getMock()方法中指定名称空间会导致类加载异常,因为双重名称空间:
$stub = $this->getMock('MyApp\MyStubClass');
// Fatal error: Class 'MyApp\MyApp\MyStubClass' not found
Run Code Online (Sandbox Code Playgroud)
这让我觉得很奇怪(并且getmock()不会接受带有反斜杠的命名空间).我能想到的唯一原因可能是因为这个类是在自动加载器中注册的吗?
有什么想法吗?
我如何在php中更改单元测试日期操作类的当前时间(即time()的输出)?
当试图做
pear install phpunit/PHPUnit
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
Failed to download pear/HTTP_Request2 within preferred state "stable", latest release is version 2.0.0RC1, stability "beta", use "channel://pear.php.net/HTTP_Request2-2.0.0RC1" to install
phpunit/PHPUnit can optionally use PHP extension "curl"
phpunit/PHPUnit can optionally use PHP extension "dbus"
pear/XML_RPC2 requires package "pear/HTTP_Request2" (version >= 0.6.0)
phpunit/PHPUnit requires package "pear/XML_RPC2"
No valid packages found
install failed
Run Code Online (Sandbox Code Playgroud)
它说在那里使用另一个频道,但我似乎无法发现或添加该频道!执行此操作的正确命令是什么,或者我还能做什么?
非常感谢,MrB
编辑:
得到它,哇,10s后张贴.
pear install HTTP_Request2-2.0.0RC1
Run Code Online (Sandbox Code Playgroud) PHPUnit getMock($classname, $mockmethods)根据给定的类名创建一个新对象,让我更改/测试我指定的方法的行为.
我渴望一些不同的东西; 它正在改变现有对象方法的行为 - 无需构建新对象.
那可能吗?如果有,怎么样?
在考虑问题时,我得出的结论是,通过序列化对象,更改序列化字符串以使对象成为扩展旧类加上模拟方法的新类的实例是可能的.我想要一些代码 - 或者可能已经存在某些代码.
虽然再次创建被模拟对象肯定是可能的,但在我的测试中这样做太复杂了.因此,如果我真的不需要,我不想这样做.这是一个TYPO3 TSFE实例,并且在引导过程中设置一次已经足够困难了.
我安装了Mountain Lion,我无法让phpunit工作.
$ pear config-get bin_dir
/Users/greg/pear/bin
$cd /Users/greg/pear/bin
$ls
pear*
peardev*
pecl*
phpunit*
$phpunit
-bash: phpunit: command not found
Run Code Online (Sandbox Code Playgroud) 我有一个我需要模拟的课程:
class MessagePublisher
{
/**
* @param \PhpAmqpLib\Message\AMQPMessage $msg
* @param string $exchange - if not provided then one passed in constructor is used
* @param string $routing_key
* @param bool $mandatory
* @param bool $immediate
* @param null $ticket
*/
public function publish(AMQPMessage $msg, $exchange = "", $routing_key = "", $mandatory = false, $immediate = false, $ticket = null)
{
if (empty($exchange)) {
$exchange = $this->exchangeName;
}
$this->channel->basic_publish($msg, $exchange, $routing_key, $mandatory, $immediate, $ticket);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Mockery 0.7.2
$mediaPublisherMock = …Run Code Online (Sandbox Code Playgroud) 我已经使用PHPUnit设置了PhpStorm 5,我很好奇PhpStorm是否有一些功能可以在保存文件时自动运行单元测试.像守望者和守卫一样.我试过搜索我们心爱的www和PhpStorm文档,但一直无法找到它的解决方案.
我有一个令人沮丧的时间试图找到有关PHPUnit的Selenium 2的任何信息,除了源代码和我可以"浏览"以"弄明白"的测试.每个人的最爱似乎都是
https://github.com/sebastianbergmann/phpunit-selenium/blob/master/Tests/Selenium2TestCaseTest.php
...但我肯定不需要挖掘数百行来源来获得简单问题的答案?我在哪里可以找到初学者指南,基本文档或任何其他内容?
我正在使用Homestead为我的Laravel应用程序提供服务.我正在尝试运行PHPUnit.根据文件:
app/tests目录中提供了一个示例测试文件.安装新的Laravel应用程序后,只需
phpunit在命令行上运行即可运行测试.
好吧,当我phpunit在我的项目根目录(在Homestead环境中)"简单地运行"时,我得到了这个:
目前尚未安装"phpunit"程序.
我需要单独安装PHPUnit吗?文档没有提到它.我究竟做错了什么?
我真的很不知道发生了什么 - 这一切都始于PHPUnit Error: No code coverage driver is available在尝试运行测试覆盖率报告时的错误,最后我调试到下面描述的可复制集.但要设置阶段 - 我使用的是Laravel 5.5,Xdebug 2.5.5,PHPUnit 6.5.5.我的测试代码说明了这个问题:
<?php
use Tests\TestCase;
class A extends TestCase
{
public function testA()
{
echo( get_cfg_var('cfg_file_path')); exit;
}
}
Run Code Online (Sandbox Code Playgroud)
输出 C:\Users\xxx\AppData\Local\Temp\7598.tmp
将它与输出正确的php.ini路径的代码进行比较:
<?php
use PHPUnit\Framework\TestCase;
class A extends TestCase
{
public function testA()
{
echo( get_cfg_var('cfg_file_path')); exit;
}
}
Run Code Online (Sandbox Code Playgroud)
输出: C:\server\php\php.ini
怎么会这样?加载的php.ini文件如何根据执行的代码进行更改?更好的是 - 如何加载我正确的php.ini文件(启用了xdebug),而不是这个冒号?
在这两种情况下,测试都是使用 phpunit tests\unit\a
文件夹结构是:
Laravel Project
????tests
????Unit
????A.php
Run Code Online (Sandbox Code Playgroud) phpunit ×10
php ×8
mocking ×3
unit-testing ×3
pear ×2
apache ×1
automation ×1
homestead ×1
httprequest ×1
laravel ×1
laravel-5.5 ×1
object ×1
phpstorm ×1
silex ×1
vagrant ×1
xdebug ×1