标签: phpunit

排除pdepend,phpmd,phpcpd,phpcs,phpdoc,phploc中的某些目录和文件

在我的项目中有一些目录和某些PHP文件的大小非常大,因为我的构建失败了,我想将它们排除在我的 build.xml

问题1 -我是否必须为--ignore="path/filename"项目中的每个php文件编写?

Ques2-有些文件不是php,但.dat我也应该提一下这些文件--ignore吗?

问题3 -我可以指定根据文件大小排除文件,以便排除所有大于500kb的文件吗?

我当前的xml文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>

<project name="name-of-project" default="build" basedir=".">
  <property name="root.dir" value="${basedir}/.."/>
  <property name="source" value="${root.dir}"/>

 <target name="clean"
         description="Clean up and create artifact directories">
  <delete dir="${basedir}/build/api"/>
  <delete dir="${basedir}/build/code-browser"/>
  <delete dir="${basedir}/build/coverage"/>
  <delete dir="${basedir}/build/logs"/>
  <delete dir="${basedir}/build/pdepend"/>

  <mkdir dir="${basedir}/build/api"/>
  <mkdir dir="${basedir}/build/code-browser"/>
  <mkdir dir="${basedir}/build/coverage"/>
  <mkdir dir="${basedir}/build/logs"/>
  <mkdir dir="${basedir}/build/pdepend"/>
 </target>

 <target name="phpunit"
         description="Run unit tests using PHPUnit and generates junit.xml and clover.xml">
  <exec executable="phpunit" failonerror="true">
    <env key="DOCUMENT_ROOT" value="${source}/api"/>
    <env key="MODEL_ROOT" value="${source}/model"/> …
Run Code Online (Sandbox Code Playgroud)

phpunit phpdoc php-codebrowser jenkins

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

我尝试从PhpStorm运行PHPUnit时出错

当我尝试在IDE PhpStorm中运行PHPUnit测试时,我没有什么问题.

我使用的composer文件看起来像:

{
    "require": {
        "phpunit/phpunit": "3.7.19"
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我运行测试时,我会发现异常: PHP Fatal error: Uncaught exception 'PHPUnit_Framework_Exception' with message 'Class "PHPUnit_Extensions_RepeatedTest" does not extend PHPUnit_Framework_TestCase.'

怎么了?当我加入梨装版本测试工作正常.

// 编辑 示例测试类:

 class ReaderTest extends PHPUnit_Framework_TestCase
    {
        /**
         * @test
         */
        public function shouldGetReadedValue ()
        {
            $this->assertTrue(true);
        }
    }
Run Code Online (Sandbox Code Playgroud)

// EDIT2 跟踪:

/usr/bin/php /tmp/ide-phpunit.php --no-configuration /path/to/my/project
Testing started at 14:53 ...
PHP Fatal error:  Uncaught exception 'PHPUnit_Framework_Exception' with message 'Class "PHPUnit_Extensions_RepeatedTest" does not extend PHPUnit_Framework_TestCase.' in /path/to/my/project/vendor/phpunit/phpunit/PHPUnit/Framework/TestSuite.php:183
Stack trace:
#0 /path/to/my/project/vendor/phpunit/phpunit/PHPUnit/Framework/TestSuite.php(315): PHPUnit_Framework_TestSuite->__construct(Object(ReflectionClass))
#1 …
Run Code Online (Sandbox Code Playgroud)

php testing phpunit phpstorm composer-php

18
推荐指数
3
解决办法
2万
查看次数

为Symfony EventListener编写UnitTest

我这里有一个SymfonyBundle,它实际上不是一个自定义EventDispatcher和一个EventListener.

我如何进行单元测试此代码?

我知道如何为控制器等创建功能测试,但我不确定如何为这个调度程序和监听器编写测试.

有人可以指出我正确的方向,谷歌似乎并没有帮助我在这一方面.

提前致谢.

山姆J.

编辑:04/04/2014:是我试图创建测试的包

我已经设置了测试来检查是否加载了两个服务(调度程序和监听程序),但现在我需要测试功能性...例如检查在MY调度程序上触发的事件是否在kernel.terinate上的REAL调度程序上触发.

编辑所以我很好地假设我只需要触发我的事件,然后以某种方式进入kernel.terminate,并检查我的事件是否被真正的调度员解雇了,但是如何...

phpunit symfony

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

PHPUnit - 测试中的自动加载类

我的项目中有以下结构:

/
/app
/app/models/ --UserTable.php

/lib
/lib/framework
/lib/framework/Models
/lib/framework/Db

/tests -- phpunit.xml, bootstrap.php
/tests/app
/tests/app/models --UserTableTest.php
Run Code Online (Sandbox Code Playgroud)

使用app和lib目录,我有各种类可以一起运行我的应用程序.要设置我的测试,我创建了一个/tests/phpunit.xml文件和/tests/bootstrap.php

phpunit.xml

<phpunit bootstrap="bootstrap.php">
</phpunit>
Run Code Online (Sandbox Code Playgroud)

bootstrap.php中

<?php

function class_auto_loader($className)
{
  $parts = explode('\\', $className);
  $path = '/var/www/phpdev/' . implode('/', $parts) . '.php';

  require_once $path;
}

spl_autoload_register('class_auto_loader');
Run Code Online (Sandbox Code Playgroud)

所以我有以下测试:

<?php

class UserTableTest extends PHPUnit_Framework_TestCase
{
  protected $_userTable;

  public function setup()
  {
    $this->_userTable = new app\models\UserTable;
  }

  public function testFindRowByPrimaryKey()
  {
    $user = $this->_userTable->find(1);

    $this->assertEquals($user->id, 1);
  }
}
Run Code Online (Sandbox Code Playgroud)

但是当我进行测试时它找不到课程 - PHP Fatal error: Class 'app\models\UserTable' not found …

php phpunit

18
推荐指数
3
解决办法
2万
查看次数

如何安装旧版本的PHPUNIT?

我们有一台运行PHP 5.3.3的Centos 6.3机器.我不小心卸载了PHPUNIT.我无法再重新安装它.较新的版本不适用于PHP 5.3.3.不幸的是,我无法更新我的PHP版本(公司陷入困境).我如何解决它?

我试过了:

$ wget https://phar.phpunit.de/phpunit.phar
$ chmod +x phpunit.phar
$ sudo mv phpunit.phar /usr/local/bin/phpunit
$ phpunit --version
Run Code Online (Sandbox Code Playgroud)

按照建议,它不起作用.

php phpunit centos

18
推荐指数
2
解决办法
9876
查看次数

如何在Laravel 5包中的测试中模拟Accept标头?

我正在构建一个Laravel包,它Illuminate\Http\Request通过注入一个新方法.我正在注入的方法已经完成,预计可以很好地工作,但我也想在发布它之前测试它.

我的测试要求我更改请求的Accept标题,以便我查看测试是否通过.所以我已经完成以下操作来模拟请求:

// package/tests/TestCase.php

namespace Vendor\Package;

use Illuminate\Http\Request;
use Orchestra\Testbench\TestCase as Orchestra;

abstract class TestCase extends Orchestra
{
    /**
     * Holds the request
     * @var Illuminate\Http\Request
     */
    protected $request;

    /**
     * Setup the test
     */
    public function setUp()
    {
        parent::setUp();

        $this->request = Request::capture();

        $this->request->headers->set('Accept', 'application/x-yaml');
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在我的测试中,我使用我正在注入的方法Request,$this->request->wantsYaml()并且它始终返回false,因为Accept标头未设置为application/x-yaml.

class RequestTest extends TestCase
{
    /** @test */
    public function it_should_return_a_bool_if_page_wants_yaml_or_not()
    {
        dump($this->request->wantsYaml()); // Return false

        $this->assertTrue($this->request->wantsYaml()); // …
Run Code Online (Sandbox Code Playgroud)

php testing phpunit package laravel-5

18
推荐指数
1
解决办法
698
查看次数

PHPUnit覆盖:允许的内存大小为536870912字节耗尽

我正在尝试使用以下命令使用PHPUnit和phpdbg为我的PHP项目生成代码测试覆盖:

phpdbg -dmemory_limit=512M -qrr ./bin/phpunit -c .phpunit.cover.xml
Run Code Online (Sandbox Code Playgroud)

这非常好用:

PHPUnit 6.2.4 by Sebastian Bergmann and contributors.

........                                                            8 / 8 (100%)

Time: 114 ms, Memory: 14.00MB

OK (8 tests, 13 assertions)

Generating code coverage report in HTML format ... done
Run Code Online (Sandbox Code Playgroud)

但是,当我在docker容器中使用完全相同的命令时:

docker run -it --name YM4UPltmiPMjObaVULwsIPIkPL2bGL0T -e USER=sasan -v "/home/sasan/Project/phpredmin:/phpredmin" -w "/phpredmin" --user "1000:www-data" php:7.0-apache phpdbg -dmemory_limit=512M -qrr ./bin/phpunit -c .phpunit.cover.xml
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

PHPUnit 6.2.4 by Sebastian Bergmann and contributors.

[PHP Fatal error:  Allowed memory size of 536870912 bytes exhausted (tried to …
Run Code Online (Sandbox Code Playgroud)

php phpunit docker phpdbg

18
推荐指数
3
解决办法
3445
查看次数

PHPUnit - 创建Mock对象以充当属性的存根

我正在尝试在PHPunit中配置Mock对象以返回不同属性的值(使用__get函数访问)

例:

class OriginalObject {
 public function __get($name){
switch($name)
 case "ParameterA":
  return "ValueA";
 case "ParameterB":
  return "ValueB";
 }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用以下方法来模拟:

$mockObject = $this->getMock("OrigionalObject");

$mockObject    ->expects($this->once())
    ->method('__get')
    ->with($this->equalTo('ParameterA'))
    ->will($this->returnValue("ValueA"));

$mockObject    ->expects($this->once())
    ->method('__get')
    ->with($this->equalTo('ParameterB'))
    ->will($this->returnValue("ValueB"));
Run Code Online (Sandbox Code Playgroud)

但这很可怕:-(

php phpunit mocking

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

PHPUnit:单个测试中的多个断言,只见第一次失败

我在PHPUnit中看到的下一个奇怪之处:

class DummyTest extends PHPUnit_Framework_TestCase {
    public function testDummy() {
        $this->assertTrue(false, 'assert1');
        $this->assertTrue(false, 'assert2');
    }

    public function testDummy2() {
        $this->assertTrue(false, 'assert3');
    }
}
Run Code Online (Sandbox Code Playgroud)

一旦第一个断言在测试中失败,则忽略测试的其余部分.

所以(通过简单调用phpunit DummyTest.php):

  • 上面的代码将显示2个测试, 2个断言,2个失败.什么?

  • 如果我通过所有测试,那么我会好的(2个测试,3个断言).好.

  • 如果我只通过除assert2之外的所有测试,我得到2个测试,3个断言,1个失败.好.

我不明白,但是PHPUnit已经存在了很长时间,当然它必须是我吗?

计数不仅不是我期望的,而且只显示上面代码中第一个失败断言的错误消息.

(顺便说一句,我正在分析PHPUnit为CI生成的xml格式,而不是测试实际代码,因此在一次测试中实现了多个断言.)

php phpunit

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

测试旧版PHP Spaghetti代码?

我从开发人员那里继承了一个相当大的,自制的,php4 + MySQL,电子商务项目,他们在写作时自学了编程和html.(我会感到不寒而栗,除非他们能够从头开始做这么多事情,这真是令人印象深刻.)我的工作是保持它并以新功能推进它.

代码的功能取决于$_SESSION数据和其他全局状态结构,然后这些结构会影响代码的流程以及通过require语句显示站点的哪些部分.当我去年接受它时,我的第一个任务是将所有重复内容抽象为单独的文件,这些文件包含在require语句中,并且还从"显示"或输出代码中删除了大部分"逻辑"代码,但我无法删除这一切.我已经将代码转移到了我可以使用的函数中,但这仍然非常有限.类和方法现在肯定是不可能的.

所有测试都是手动/视觉完成的.我想开始自动化一些测试,但我根本不知道从哪里开始.函数的单元测试非常简单,但函数中的代码很少,而且大部分都非常简单.我看phpUnitDbUnit,但所有的实例以及关于它们的讨论集中在类和方法.

那么,除了项目中最琐碎的部分之外,我还有哪些选项可以开始实施单元测试?

php legacy phpunit unit-testing

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