标签: phpunit

PHPUnit:强制显示断言值

在PHPUnit测试失败时,将显示实际值和期望值.
但是当测试通过时,不会显示此信息.

如何强制PHPUnit始终显示预期和实际的断言结果?

php phpunit unit-testing

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

检查是否在没有传递任何参数的情况下调用mock的方法(在phpunit中)

在phpunit中我们可以指定特别调用的方法

->with($this->equalTo('foobar'))
Run Code Online (Sandbox Code Playgroud)

或任何

->with($this->anything())
Run Code Online (Sandbox Code Playgroud)

参数.

但是有没有办法指定该方法在没有参数的情况下被调用?

这是我期望失败的测试:

public function testZ()
{
    $a = $this->getMock('q');

    $a->expects($this->once())
        ->method('z')
        ->with(); // <--- what constraint to specify here?

    $a->z(1);
}
Run Code Online (Sandbox Code Playgroud)

UPD:

这个问题具有理论性质,所以我没有任何现实生活的例子.在某些情况下,我现在可以想到的是:

public function testMe($object)
{
    $object->foo();
}
Run Code Online (Sandbox Code Playgroud)

我们假设testMe应该(通过设计和需求)总是调用没有参数的方法(假设foo()有默认值).因为在这种情况下任何非默认参数(更精确:任何参数!=默认参数,我们还不知道,哪些可能可以独立改变)会导致致命的后果.

php testing phpunit unit-testing

13
推荐指数
1
解决办法
5915
查看次数

如何创建具有Doctrine实体的测试而不持久化它们(如何设置id)

我正在为Symfony2项目进行测试,现在我正在寻找一种方法来创建涉及实体对象的测试而不会持久化它们.问题是:id是一个私有字段,没有setter.我可以创建新对象并设置一些属性,但我无法测试涉及getId()调用的任何内容.

$entity = new TheEntity();
// Can't set ID!
$entity->setProperty('propertyValue');

$name = $entity->getProperty(); // OK
$id = $entity->getId(); // not OK - null
Run Code Online (Sandbox Code Playgroud)

我所知道的决议:

  1. 初始化整个内核(Symfony的WebTestCase :: createKernel())并持久化实体
  2. 为每个实体创建一个模拟对象,它将返回有效的ID
  3. 黑客像TheEntity类中的静态方法返回初始化对象,或添加id字段的setter

建议的处理方法是什么,如何使用set ID以干净,快速的方式获取实体进行测试?

编辑

原来我可以用嘲笑来解决这个问题......对不起,我还在学习.我一直在寻找一种干净,标准,快速的方法来完成任务.但是我忘记了第二个参数getMock()- 也就是说我不必模拟我将要使用的实体的每个方法.我想避免多个->expects()->method()->will()等等.这是通过添加:array('getId').这个辅助方法解决了这个问题:

protected function getEntityMock($entityClass, $id)
{
    $entityMock = $this->getMock($entityClass, array('getId'));
    $entityMock
            ->expects($this->any())
            ->method('getId')
            ->will($this->returnValue($id));

    return $entityMock;
}
Run Code Online (Sandbox Code Playgroud)

当创建同一个类的许多实体时,事情当然可以通过更多辅助方法来简化,例如:

protected function getTheEntityMock($id)
{
    return $this->getEntityMock('\The\NameSpace\TheEntity', $id);
}
Run Code Online (Sandbox Code Playgroud)

唯一的限制是实体本身不能使用 …

testing phpunit mocking symfony doctrine-orm

13
推荐指数
3
解决办法
4847
查看次数

如何在Codeception功能测试中使用PHPUnit断言方法?

我正在使用Codeception进行Laravel 4 PHP应用程序的单元,功能和验收测试.

我的单元测试看起来如下:

use Codeception\Util\Stub;
class ExampleTest extends \Codeception\TestCase\Test 
{
 public function testExample()
 {
  $example = true;
  $this->assertSame($example, true);
 }
}
Run Code Online (Sandbox Code Playgroud)

我的功能测试看起来像这样:

use \TestGuy;
class ExampleCest
{
 public function example(TestGuy $I)
 { 
  $I->amOnPage('/auth/login');
  $I->see('Sign in');
 }
}
Run Code Online (Sandbox Code Playgroud)

但我也想在我的功能测试中使用PHPUnit断言方法.但是当我尝试时,我得到了这个错误:

调用未定义的方法ExampleCest :: assertSame()

如何在Codeception功能测试中使用PHP断言方法?

phpunit codeception

13
推荐指数
3
解决办法
7540
查看次数

PHPUnit TestSuite排除

所以我想从我的Testsuite中排除一个directoy就像这样:

<testsuite name="PHPUnitWillKillMe">   
    <directory>src/*/Bundle/*/*Bundle/Tests</directory>
    <exclude>src/*/Bundle/*/*Bundle/Tests/Controller/</exclude>
</testsuite>   
Run Code Online (Sandbox Code Playgroud)

应该测试除控制器之外的所有东西.

问题是,它不起作用.当我运行时,PHPUnit仍然在src// Bundle //*Bundle/Tests/Controller /中运行所有测试

 phpunit --testsuite PHPUnitWillKillMe
Run Code Online (Sandbox Code Playgroud)

任何的想法?

最好的祝福!

我测试的PHPUnit版本是3.7.21和3.7.28.

php phpunit unit-testing

13
推荐指数
2
解决办法
7285
查看次数

PHPUnit:如何模拟今天的日期而不将其作为参数传递?

我正在我班上测试一个做日期检查的方法.问题是该方法取决于今天的日期(每天都在变化),这使得这很难测试.我如何模仿今天的日期,以便我的测试明天仍然通过?

phpunit unit-testing

12
推荐指数
2
解决办法
5503
查看次数

NetBeans中PHPUnit和Selenium的代码完成

如何让NetBeans为PHPUnit类和方法提供代码完成?

我已经尝试从PHPUnit GitHub项目下载,但我不明白为什么该目录与Selenium文档中提到的不同.我正在寻找该/test/PHPUnit/Extensions/SeleniumTestCase.php文件的示例.

我已经从PEAR安装了PHPUnit,但我现在需要的是完整的PHPUnit文件,所以我可以将它包含在我的IDE中(在本例中为NetBeans).

phpunit netbeans

12
推荐指数
1
解决办法
5724
查看次数

phpunit测试xml输出

我编写了一个API,它从另一个API获取数据并将其转换为XML.如何使用phpunit测试输出是否为预期的XML并且有效?

我应该创建一个包含所有节点的样本xml,然后检查输出吗?

xml phpunit unit-testing

12
推荐指数
4
解决办法
5357
查看次数

zend框架2 + phpunit +多个模块+持续集成

提前感谢您的任何意见.我刚刚开始从Zend Framework 1切换到ZF2,在完成快速启动和其他几个教程后,我注意到使用phpunit的'默认'方式有一个短暂的结果.无论是那个还是我只是迷茫而迷茫.

默认项目的文件夹结构是

Project
| - config
| | - autoload
| | | - global.php
| | | - local.php.dist
| | - application.config.php
| - data
| - module
| | - Application
| | | - config
| | | - src
| | | - test
| | | | - ApplicationTest
| | | | - Bootstrap.php
| | | | - phpunit.xml
| | | | - TestConfig.php.dist 
| | | - view …
Run Code Online (Sandbox Code Playgroud)

ant phpunit jenkins zend-framework2

12
推荐指数
1
解决办法
2106
查看次数

在没有测试路线的情况下,在Laravel中对控制器进行单元测试的最佳方法是什么

我已经阅读了很多关于使用测试控制器的文档,$this->call($destination, $parameters, 'GET');但这似乎依赖于正在设置的路由,并且知道使用权$destination.

通常这没关系,但是从路径访问控制器似乎不适合进行单元测试.我想对控制器进行单元测试,而不是路由.是否有标准的单元测试控制器方式,而不处理路由?

只需手动实例化控制器并调用该方法就够了吗?例如

$controller = new MyController;
$response = $controller->someMethod($param);
$this->assertSomething($response);
Run Code Online (Sandbox Code Playgroud)

也许控制器不应该进行单元测试(并且只进行验收测试)并且我的请求表明我的控制器太重了.

phpunit unit-testing laravel laravel-4

12
推荐指数
2
解决办法
4409
查看次数