标签: phpunit

symfony 2.1:phpunit -c app试图运行symfony核心测试

在我的Symfony 2.1应用程序中,我无法运行推荐的 phpunit -c app/.我收到以下错误消息(我添加了换行符):

PHPUnit 3.6.10 by Sebastian Bergmann.

Configuration read from /symfony2-dual-auth/app/phpunit.xml.dist

F

PHP Fatal error:  main(): Failed opening required
'/symfony2-dual-auth/vendor/symfony/symfony/vendor/autoload.php'  
(include_path='.:/usr/share/php:/usr/share/pear')
in /symfony2-dual-auth/vendor/symfony/symfony/autoload.php.dist on line 3
Run Code Online (Sandbox Code Playgroud)

这里有完整的源代码:https://github.com/meonkeys/symfony2-dual-auth.除了测试,因为它没有通过.这是src/Oh/FOSFacebookUserBundle/Tests/SimpleFunctionalTest.php......

<?php

namespace Oh\FOSFacebookUserBundle\Tests;

use Symfony\Bundle\FrameworkBundle\Tests\Functional\WebTestCase;

class SimpleFunctionTest extends WebTestCase {

  public function testIndex() {
    $client = static::createClient();

    $crawler = $client->request('GET', '/login');

    $this->assertEquals(1, $crawler->filter('html:contains("Remember me")')->count());
  }

}
Run Code Online (Sandbox Code Playgroud)

phpunit symfony

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

在PHPUnit Mock对象中返回不同的结果

我一直在努力让我们的系统与PHPUnit更加兼容,所以我们可以对我们的类进行更多的单元测试,并设法让它们中的一些使用模拟对象,但我遇到了一个我看不出的问题到处走走

我们拥有的一个类(我正在创建一个模拟版本)用于查询.您将查询字符串传递给它的"query()"方法,它会记录查询,运行它并返回结果.它还使用名为"get_row()"的方法包装mysql_fetch_assoc,该方法返回与原始数据类似的数组值.

问题在于,在某些方法中,有多个查询被传递给"query()"方法,因此需要运行多个while循环以将数据加载到不同的变量中.我在下面创建了一个简化版本:

class object{
    public function __construct($query){
        $this->query = $query;
    }

    public function loadData(){

        $data1 = queryDataSource("SELECT * FROM data1");
        $data2 = queryDataSource("SELECT * FROM data2");

        return Array(
            "data1" => $data1,
            "data2" => $data2,
        );

    }

    private function queryDataSource($query){
        $this->query->query($query)

        while($row = $this->query->get_row()){
            $result[] = $row;
        }

        return $result
    }
}

class testObject extends PHPUnit_Framework_TestCase{
    method testLoadData(){
        $test_data = Array('name' => 'Bob', 'number' => '98210');

        $query = $this->getMock('Query');
        $query->expects($this->any())->method('query');
        $query->expects($this->at(1))->method('get_row')->will($this->returnValue($test_data);
        $query->expects($this->at(2))->method('get_row')->will($this->returnValue(False);
        $query->expects($this->at(3))->method('get_row')->will($this->returnValue($test_data);
        $query->expects($this->at(4))->method('get_row')->will($this->returnValue(False);
    }
}
Run Code Online (Sandbox Code Playgroud)

为了逃避$ object-> queryDataSource()中的第一个while循环,我返回一个布尔FALSE值,就像执行mysql_fetch_assoc时一样.问题是,当它试图运行第二个查询并通过get_row()获取数据时,模拟对象似乎继续返回FALSE ratehr而不是继续到at(3)点.即使有4个对象也会发生这种情况,只有第一个会将测试数据作为返回值,然后第二次得到FALSE,其他的每次都会得到FALSE. …

php phpunit mocking

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

你会怎么为这样的课程写一个考试?

class Documentation
{
    private $_text;

    public function __construct($text)
    {
        $this->_text = $text;
    }

    public function generate()
    {
        return new \DOMElement('documentation', $this->_text);
    }
}
Run Code Online (Sandbox Code Playgroud)

我能想到的显而易见的解决方案是创建new DOMDocument,追加generate()函数调用的结果并与使用的期望元素进行比较$this->assertEqualXMLStructure,但由于某种原因我不喜欢它并且确定有其他选择.

有任何想法吗?

UPD:好像我错过了一些重要的东西:我想确定的是返回具有特定内容的特定类型的元素.怎么做?

UPD 2:

这是我目前可以创造的,但它很难看,不是吗?

public function testGenerate()
{
    $expected = new \DOMDocument();
    $expected->loadXML('<?xml version="1.0" encoding="utf-8"?><documentation>foo</documentation>');

    $documentation = new Documentation('foo');
    $actual = new \DOMDocument('1.0', 'utf-8');
    $actual->appendChild($documentation->generate());

    $this->assertEqualXMLStructure($expected, $actual);
}
Run Code Online (Sandbox Code Playgroud)

php testing phpunit unit-testing

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

在PHPUnit中使用反射

我正在使用PHPUnit测试Symfony2项目中使用的类的私有方法.我正在使用许多开发人员描述的私有方法测试策略(通过反射),例如http://aaronsaray.com/blog/2011/08/16/testing-protected-and-private-attributes-and-methods-using -phpunit /

但不幸的是,我收到以下错误:

有1个错误:1)我的\ CalendarBundle\Tests\Calendar\CalendarTest :: testCalculateDaysPreviousMonth ReflectionException:类日历不存在/Library/WebServer/Documents/calendar/src/My/CalendarBundle/Tests/Calendar/CalendarTest.php:47

<?php
namespace My\CalendarBundle\Tests\Calendar;

use My\CalendarBundle\Calendar\Calendar;

class CalendarTest 
{    
    //this method works fine     
    public function testGetNextYear()
    {
        $this->calendar = new Calendar('12', '2012', $this->get('translator'));        
        $result = $this->calendar->getNextYear();

        $this->assertEquals(2013, $result);
    }

    public function testCalculateDaysPreviousMonth()
    {        
        $reflectionCalendar = new \ReflectionClass('Calendar'); //this is the line

        $method = $reflectionCalendar->getMethod('calculateDaysPreviousMonth');      
        $method->setAccessible(true);

        $this->assertEquals(5, $method->invokeArgs($this->calendar, array()));                 
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么?

先感谢您

reflection phpunit symfony

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

PHPUnit assertTrue问题

我正在使用PHPUnit来测试我的代码但是当我使用assertTrue时,phpunit表现得很好.这是phpunit的正常行为吗?我收到以下错误.

声明1为真的失败.

php phpunit

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

如何使用PHPUnit测试我的Zend Framework 2 InputFilter?

我有一个我创建的基本ZF2 InputFilter.我如何使用PHPUnit测试它而不将其附加到表单?

我找不到任何关于如何做的样本.希望有人可以帮忙.

phpunit zend-framework2 zend-inputfilter

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

在这个模拟对象上找不到Mockery方法shouldRecieve()

我正在使用laravel和PHPunit的padraic/mockery包.我使用的是PHP 5.4.3.

在尝试创建模拟对象以测试控制器时,我收到错误:

"BadMethodCallException: Method ... shouldRecieve() is not found on this mock object"
Run Code Online (Sandbox Code Playgroud)

我的代码如下,我正在非常仔细地阅读一个教程,但无法理解为什么我的模拟对象似乎没有正确实例化.

public function testItWorks()
{
    $mocked = m::mock('SearchRepositoryInterface');
    App::instance('SearchRepositoryInterface', $mocked);

    $mocked->shouldRecieve('test')->once()->andReturn('NOT hitting the db');
    $response = $this->call('GET', 'search');

    $this->assertTrue($response->isOK());
}
Run Code Online (Sandbox Code Playgroud)

php phpunit laravel mockery laravel-4

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

disableOriginalConstructor()和will()冲突

我有一个使用DB适配器的模型,我想测试.DB适配器的构造函数处理所有数据库连接,所以我想在测试期间避免它,否则它会返回有关db pass/db username等未设置的错误.

我正在运行的代码如下所示,因为您看到我正在使用disableOriginalConstructor()以防止调用构造函数.

问题是,我得到这个错误,当我尝试使用$mysql_stub在will():

参数1传递给PHPUnit_Framework_MockObject_Builder_InvocationMocker ::会()必须实现接口PHPUnit_Framework_MockObject_Stub,Mock_Pages_MySQL_Page_46612429的情况下给出的,称为/Applications/MAMP/htdocs/lib/Pages/trunk/Tests/Unit/PageTest.php线185和定义

有人可以建议,正确的语法是什么?

class Page {

  public function getByUrl($url)
  {
      $db_page = $this->getDAOInterface();
      $db_page->getByUrl($url);
      $this->assign($db_page);
      return $this;
  }

}

class PageTest extends PHPUnit_Framework_TestCase
{
  public function testGetByUrl()
  {
      $test_url   = "foo-bar";
      $page_stub  = $this->getMock(
          'Pages_Model_Page', 
          array('getDAOInterface', 'assign')
      );

      $mysql_stub = $this->getMockBuilder('Pages_MySQL_Page')
                         ->setMethods(array('getByUrl'))
                         ->disableOriginalConstructor()
                         ->getMock();

      $mysql_stub->expects($this->once())
                ->method('getByUrl')
                ->with($this->equalTo($test_url));

      $page_stub->expects($this->once())
                ->method('getDAOInterface')
                ->with()
                ->will($mysql_stub);

      $page_stub->expects($this->once())
                ->method('assign')
                ->with($mysql_stub);

      $page_stub->geByUrl($test_url);
  }
}
Run Code Online (Sandbox Code Playgroud)

php phpunit unit-testing

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

PHPUnit/DbUnit"连接太多"

在运行PHPUnit测试时,会创建许多连接但不会关闭.我可以看到这个

mysql> show processlist;
Run Code Online (Sandbox Code Playgroud)

在我的数据库类中,我通过实现PHPUnit_Extensions_Database_TestCase#getConnection()来创建数据库连接.

我确保在拆解时连接关闭.请参阅代码段:

<?php

abstract class My_Tests_DatabaseTestCase extends \PHPUnit_Extensions_Database_TestCase
{

    static private $pdo = null;
    private $conn = null;

    /**
     * @throws RuntimeException
     * @return PHPUnit_Extensions_Database_DB_IDatabaseConnection
     */
    final public function getConnection()
    {
        $iniFilePath = __DIR__ . '/../../../db-config.ini';
        $iniFile = parse_ini_file($iniFilePath, true);

        $dsn = "mysql:dbname=".$iniFile['phpunit']['dbname'].";host=".$iniFile['phpunit']['host'];
        if ( $this->conn === null ) {
            if ( self::$pdo == null ) {
                self::$pdo = new \PDO($dsn, $iniFile['phpunit']['user'], $iniFile['phpunit']['password']);
            }
            $this->conn = $this->createDefaultDBConnection(self::$pdo, $iniFile['phpunit']['dbname']);
        }
        return $this->conn;
    }

    protected function getSetUpOperation()
    { …
Run Code Online (Sandbox Code Playgroud)

mysql phpunit dbunit pdo

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

PHPUnit与DBUnit:初始夹具无法设置

我为我的一个模块创建了一个数据库测试类.当我尝试运行测试用例时,初始夹具未设置 - 测试数据库中的所有表都是空的.这是我的getDataSet()方法:

    /**
 * @return PHPUnit_Extensions_Database_DataSet_IDataSet
 */
public function getDataSet()
{
    return $this->createFlatXMLDataSet(dirname(__FILE__).'/dataSets/initial.xml');
}
Run Code Online (Sandbox Code Playgroud)

我发现getDataSet()方法被调用,因为当我在其中创建语法错误时,测试执行失败.但是当我在文件initial.xml中创建错误时,没有任何反应.似乎文件initial.xml根本没有被解析!

该文件的路径应该没问题,但我注意到当我输入无效路径时,没有任何事情发生.显然,方法createFlatXMLDataSet()在出错时不会抛出任何异常.所以现在我没有任何线索为什么它不起作用:(

php phpunit dbunit unit-testing

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