标签: phpunit

PHPUnit:存根方法未定义

我肯定错过了什么.我正在尝试在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 phpunit unit-testing mocking

17
推荐指数
1
解决办法
7722
查看次数

如何在php中更改单元测试日期函数的当前时间

我如何在php中更改单元测试日期操作类的当前时间(即time()的输出)?

php apache phpunit unit-testing

17
推荐指数
2
解决办法
6481
查看次数

无法在首选状态"稳定"下载pear/HTTP_Request2

当试图做

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)

pear phpunit httprequest

17
推荐指数
1
解决办法
6532
查看次数

PHPUnit:现有对象的模拟方法

PHPUnit getMock($classname, $mockmethods)根据给定的类名创建一个新对象,让我更改/测试我指定的方法的行为.

我渴望一些不同的东西; 它正在改变现有对象方法的行为 - 无需构建新对象.

那可能吗?如果有,怎么样?


在考虑问题时,我得出的结论是,通过序列化对象,更改序列化字符串以使对象成为扩展旧类加上模拟方法的新类的实例是可能的.我想要一些代码 - 或者可能已经存在某些代码.


虽然再次创建被模拟对象肯定是可能的,但在我的测试中这样做太复杂了.因此,如果我真的不需要,我不想这样做.这是一个TYPO3 TSFE实例,并且在引导过程中设置一次已经足够困难了.

php phpunit mocking object

17
推荐指数
3
解决办法
1万
查看次数

OSX 10.8山狮PEAR/PHPUnit无法正常工作

我安装了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)

pear phpunit osx-mountain-lion

17
推荐指数
1
解决办法
1万
查看次数

Mockery - call_user_func_array()期望参数1是有效的回调

我有一个我需要模拟的课程:

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)

php phpunit mocking silex

17
推荐指数
1
解决办法
6455
查看次数

在PhpStorm中保存文件时运行单元测试

我已经使用PHPUnit设置了PhpStorm 5,我很好奇PhpStorm是否有一些功能可以在保存文件时自动运行单元测试.像守望者和守卫一样.我试过搜索我们心爱的www和PhpStorm文档,但一直无法找到它的解决方案.

php automation phpunit unit-testing phpstorm

17
推荐指数
1
解决办法
6015
查看次数

什么是PHPUnit的任何Selenium 2文档?

我有一个令人沮丧的时间试图找到有关PHPUnit的Selenium 2的任何信息,除了源代码和我可以"浏览"以"弄明白"的测试.每个人的最爱似乎都是

https://github.com/sebastianbergmann/phpunit-selenium/blob/master/Tests/Selenium2TestCaseTest.php

...但我肯定不需要挖掘数百行来源来获得简单问题的答案?我在哪里可以找到初学者指南,基本文档或任何其他内容?

php phpunit functional-testing selenium-webdriver

17
推荐指数
1
解决办法
6563
查看次数

在Laravel的Homestead中运行PHPUnit

我正在使用Homestead为我的Laravel应用程序提供服务.我正在尝试运行PHPUnit.根据文件:

app/tests目录中提供了一个示例测试文件.安装新的Laravel应用程序后,只需phpunit在命令行上运行即可运行测试.

好吧,当我phpunit在我的项目根目录(在Homestead环境中)"简单地运行"时,我得到了这个:

目前尚未安装"phpunit"程序.

我需要单独安装PHPUnit吗?文档没有提到它.我究竟做错了什么?

php phpunit vagrant laravel homestead

17
推荐指数
2
解决办法
8679
查看次数

根据代码内容加载不同的php.ini文件

我真的很不知道发生了什么 - 这一切都始于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)

php phpunit xdebug laravel-5.5

17
推荐指数
1
解决办法
361
查看次数