标签: phpunit

模拟支持链接方法的对象

我想知道是否有一种相当简洁的方法来模拟支持方法链接的对象...例如,数据库查询对象可能有一个如下所示的方法调用:

$result = $database->select('my_table')->where(array('my_field'=>'a_value'))->limit(1)->execute();
Run Code Online (Sandbox Code Playgroud)

如果我必须模拟两个不同的选择查询,以便它们返回不同的结果,则会出现问题.有任何想法吗?

这是关于PHPUnit的,但其他单元测试框架的经验将有所帮助.

php phpunit unit-testing mocking

7
推荐指数
1
解决办法
3025
查看次数

安装PEAR后,PHPUnit CLI不可用

我使用以下命令在我的OS X Snow Leopard盒子上安装了PHPUnit:

sudo pear channel-discover pear.phpunit.de
sudo pear install phpunit/PHPUnit
Run Code Online (Sandbox Code Playgroud)

我希望在此之后phpunitCLI命令可用,但事实并非如此.我已经查看了/usr/local/bin,/usr/lib/php/PHPUnit但找不到任何看起来像CLI的东西.

任何人都可以告诉我如何启动和运行CLI?

php macos pear phpunit

7
推荐指数
2
解决办法
1603
查看次数

PHPunit代码覆盖率错误

PHPunit正在运行,但我收到此代码覆盖率错误,并且没有获得代码覆盖率报告.

有谁知道如何解决这一问题?

谢谢,

德棉.

demian@dimbo-TP:/var/www/z2d2/tests$ phpunit
PHPUnit 3.5.15 by Sebastian Bergmann.

...

Time: 1 second, Memory: 13.00Mb

OK (3 tests, 4 assertions)

Generating code coverage report, this may take a moment.PHP Fatal error:  Class 'PHP_Token_Stream' not found in /usr/share/php/PHP/Token/Stream/CachingFactory.php on line 68
PHP Stack trace:
PHP   1. {main}() /usr/bin/phpunit:0
PHP   2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:49
PHP   3. PHPUnit_TextUI_Command->run() /usr/share/php/PHPUnit/TextUI/Command.php:129
PHP   4. PHPUnit_TextUI_TestRunner->doRun() /usr/share/php/PHPUnit/TextUI/Command.php:188
PHP   5. PHP_CodeCoverage_Report_HTML->process() /usr/share/php/PHPUnit/TextUI/TestRunner.php:363
PHP   6. PHP_CodeCoverage_Report_HTML->addItems() /usr/share/php/PHP/CodeCoverage/Report/HTML.php:135
PHP   7. PHP_CodeCoverage_Report_HTML_Node_Directory->addFile() /usr/share/php/PHP/CodeCoverage/Report/HTML.php:214
PHP   8. PHP_CodeCoverage_Report_HTML_Node_File->__construct() /usr/share/php/PHP/CodeCoverage/Report/HTML/Node/Directory.php:156
PHP   9. PHP_CodeCoverage_Util::getLinesToBeIgnored() …
Run Code Online (Sandbox Code Playgroud)

php pear phpunit code-coverage

7
推荐指数
1
解决办法
5201
查看次数

升级phpunit windows

我想在我的Windows服务器上安装PHPUnit 3.7.我按照这里的各种说明进行操作,最后得到了PHPUnit 3.4.1.当我尝试使用以下方法再次安装时:

pear update channels
pear install --alldeps phpunit/PHPUnit
Run Code Online (Sandbox Code Playgroud)

我明白了:

phpunit/PHPUnit is already installed and is the same as the released version 3.4.15
install failed
Run Code Online (Sandbox Code Playgroud)

我知道3.4.15不是最新版本......我怎么能说服PEAR它应该在哪里找到升级?

phpunit

7
推荐指数
1
解决办法
2964
查看次数

在断言实例之前,PHPUnit强迫我要求类

我正在测试一个返回另一个类的实例的对象.在内部,该类调用require_once.但是,当我尝试检查返回的对象是否属于该类型时,我收到以下消息:

InvalidArgumentException: Argument #1 of PHPUnit_Framework_Assert::assertInstanceOf() must be a class or interface name
Run Code Online (Sandbox Code Playgroud)

一旦我require_once在测试之前再次呼叫,此消息就会消失assertInstanceOf.这似乎不对.似乎PHPUnit应该足够聪明,知道该类已经加载,所以我不应该再次加载它.我在想这个错吗?我的PHPUnit配置错了吗?有没有办法避免在我的测试中再次要求这门课程?

php phpunit

7
推荐指数
2
解决办法
5236
查看次数

在PHPUnit异常上禁用堆栈跟踪

当PHPUnit断言失败时,我不需要下面的堆栈跟踪,只是我的自定义消息("Type: R Expected: 333.33333333333 Actual: 345")和PHPUnit的失败消息("Failed assert that false is true").

除了将所有测试放在try/catch块中并在显示之前从异常消息中剥离堆栈跟踪之外,还有其他方法吗?

我不希望堆栈跟踪消除除PHPUnit_Framework_ExpectationFailedException之外的任何异常,但是如果这不可能,我可以处理在所有PHPUnit测试期间丢失堆栈跟踪.

SO上的其他帖子似乎提出了相反问题的解决方案,当xdebug将其关闭时,将堆栈跟踪恢复.

PHPUnit_Framework_ExpectationFailedException : Type: R Expected: 333.33333333333 Actual: 345
Failed asserting that false is true.
#0 /usr/share/php/PHPUnit/Framework/Constraint.php(91): PHPUnit_Framework_Constraint->fail(false, 'Type: R Expecte...')
#1 /usr/share/php/PHPUnit/Framework/Assert.php(2134): PHPUnit_Framework_Constraint->evaluate(false, 'Type: R Expecte...')
#2 /usr/share/php/PHPUnit/Framework/Assert.php(888): PHPUnit_Framework_Assert::assertThat(false, Object(PHPUnit_Framework_Constraint_IsTrue), 'Type: R Expecte...')
#3 /home/simon/Development/golfants/website/unit_tests/PostTest.php(33): PHPUnit_Framework_Assert::assertTrue(false, 'Type: R Expecte...')
#4 [internal function]: PostTest->testRandomAntTypeSelected()
#5 /usr/share/php/PHPUnit/Framework/TestCase.php(976): ReflectionMethod->invokeArgs(Object(PostTest), Array)
#6 /usr/share/php/PHPUnit/Framework/TestCase.php(831): PHPUnit_Framework_TestCase->runTest()
#7 /usr/share/php/PHPUnit/Framework/TestResult.php(648): PHPUnit_Framework_TestCase->runBare()
#8 /usr/share/php/PHPUnit/Framework/TestCase.php(776): PHPUnit_Framework_TestResult->run(Object(PostTest))
#9 /usr/share/php/PHPUnit/Framework/TestSuite.php(775): PHPUnit_Framework_TestCase->run(Object(PHPUnit_Framework_TestResult))
#10 /usr/share/php/PHPUnit/Framework/TestSuite.php(745): PHPUnit_Framework_TestSuite->runTest(Object(PostTest), …
Run Code Online (Sandbox Code Playgroud)

php phpunit exception-handling

7
推荐指数
1
解决办法
3289
查看次数

集成测试PHPUnit和Phinx

我正在创建一个PHP REST api,使用PHPUnit进行单元测试和集成测试.我希望将phinx集成到数据库迁移中(而不是自己构建迁移代码).

我实际上有两个问题:

  • 我如何使用Phinx进行数据库设置?Phinx通常用作命令行工具,但我需要一些方法来调用我的单元测试类中的setup方法.

  • 我将如何进行集成测试我编写的迁移类?我想要一些验证,在每次迁移步骤后,我的数据库处于某种预期状态(可能包括在每次迁移期间应该保持一致的一些样本数据)

php phpunit database-migration

7
推荐指数
1
解决办法
1055
查看次数

Mockery中的重载和别名有什么区别?

我是新来使用嘲弄和混淆的术语aliasoverload.任何人都可以向我解释何时使用哪个?

php tdd phpunit mockery

7
推荐指数
1
解决办法
3649
查看次数

Symfony和PhpUnit内存泄漏

在我们的phpunit测试中加载Doctrine时,我们遇到内存泄漏问题

从Symfony的文档开始:http: //symfony.com/doc/2.7/cookbook/testing/doctrine.html我们编写了这个测试:

use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;

class memoryleakTest extends KernelTestCase
{
    private $em;

    protected function setUp()
    {
        self::bootKernel();

        $this->em = static::$kernel->getContainer()
            ->get('doctrine')
            ->getManager();
    }

    protected function tearDown()
    {
        parent::tearDown();

        $this->em->close();
    }

    function testEEE1()  { 
    }
    function testEEE2()  { 
    }
    function testEEE3()  { 
    }
    function testEEE4()  { 
    }
    function testEEE5()  { 
    }
    function testEEE6()  { 
    }
    function testEEE7()  { 
    }
    function testEEE8()  { 
    }
    function testEEE9()  { 
    }
    function testEEE10()  { 
    }
    function testEEE11()  { 
    }
    function testEEE12()  { …
Run Code Online (Sandbox Code Playgroud)

phpunit doctrine symfony

7
推荐指数
2
解决办法
2910
查看次数

PHPUnit模拟函数是否仍然非常有用,因为我们可以在PHP7中使用匿名类?

我是PHPUnit中的新手,并重写我的老式单元测试以使用它.我认识到框架的附加价值,使测试更具可读性,更简单,生成报告,自动化...但我仍然对模拟/存根功能存在分歧.它们是否真的有用,因为我们可以在PHP7中使用匿名类?

例如,是:

$stub = $this->createMock(SomeClass::class);
$stub->method('doSomething')
    ->willReturn('foo');
Run Code Online (Sandbox Code Playgroud)

真的应该比以下更优雅/可读/简单:

$stub = new class extends SomeClass {
    protected function doSomething() { return 'foo'; }
};
Run Code Online (Sandbox Code Playgroud)

在我看来,对于不了解框架的开发人员来说,第二个命题更具可读性和可访问性.

是否还有充分的理由使用此功能?

换句话说,我可以用PHPUnit的模拟/存根函数做些什么我不能使用匿名类吗?或者是偏好/用例问题?

php phpunit unit-testing mocking php-7

7
推荐指数
0
解决办法
704
查看次数