标签: phpunit

我可以使用@depends依赖于使用@dataProvider的测试吗?

我有一个测试类,其中一个测试通过a @dataProvider和另一个测试@depends在第一个方法上运行多次.然而,当我呼吁var_dump应该传递给第二次测试时,它给了我一个坚实的NULL,我没想到.

换句话说:这应该做什么:

<?php 
class DevicesTest extends PHPUnit_Framework_TestCase
{
    /**
     * @dataProvider registerDataProvider
     */
    public function testRegister($device, $supposedResult)
    {
        //do a bunch of tests
        return array($device, $supposedResult);
    }

    public function registerDataProvider()
    {
        return array(array("foo", "foo"));
    }

    /**
     * @depends testRegister
     */
    public function testSaveDevicePreferences($deviceArr)
    {
        $this->assertNotEmpty($deviceArr);
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

php phpunit unit-testing

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

断言var是phpunit中没有特定字符的非空字符串

我想声明一个变量是phpunit中的一个(非空白)字符串,但我不想断言字符串必须匹配任何完全字符串.

例如,我想拉一个用户名,并确保我成功获得了一些非空白用户名,但我并不确切知道我的用户名.

我可以很容易断言它是一个非空变量,或者它是一个完全匹配某个字符串的字符串,或断言var是没有phpunit帮助的字符串:

$this->assertNotEmpty($username);
$this->assertSame('myusername', $username);
$this->assertTrue(is_string($username));
Run Code Online (Sandbox Code Playgroud)

这些都接近我所需要的,使用is_string实际上测试正确的条件,但是自己做is_string还不够好,因为当测试失败时我不能再得到有用的,信息丰富的消息了,而不是告诉我实际返回了什么类型的值,错误消息变得无用:

Failed asserting that false is true.
Run Code Online (Sandbox Code Playgroud)

那么如何使用phpunit的断言系统断言var是string类型和非空白?

php phpunit unit-testing assertions

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

如何在PHPUnit和ZF3中减少测试中的数据库连接数?

我正在使用.编写Zend Framework 3应用程序的集成/数据库测试

  • zendframework/zend-test 3.1.0,
  • phpunit/phpunit 6.2.2,和
  • PHPUnit的/ DbUnit的 3.0.0

我的测试由于失败而失败

Connect Error: SQLSTATE[HY000] [1040] Too many connections
Run Code Online (Sandbox Code Playgroud)

我设置了一些断点并查看了数据库:

SHOW STATUS WHERE `variable_name` = 'Threads_connected';
Run Code Online (Sandbox Code Playgroud)

我实际上已经看到了100打开的连接.

我通过断开连接来减少它们tearDown():

protected function tearDown()
{
    parent::tearDown();
    if ($this->dbAdapter && $this->dbAdapter instanceof Adapter) {
        $this->dbAdapter->getDriver()->getConnection()->disconnect();
    }
}
Run Code Online (Sandbox Code Playgroud)

但我仍然有过度80开放的联系.

如何将测试中的数据库连接数减少到可能的最小值?


更多信息

(1)我有很多测试,其中我dispatch是一个URI.每个此类请求都会导致至少一个数据库请求,从而导致新的数据库连接.这些连接似乎没有关闭.这可能会导致最多的连接.(但是我还没有找到一种方法让应用程序在处理请求后关闭连接.)

(2)其中一个问题可能是我对数据库的测试:

protected function retrieveActualData($table, $idColumn, $idValue)
{
    $sql = new Sql($this->dbAdapter);
    $select = $sql->select($table);
    $select->where([$table . '.' . $idColumn . ' = ?' => …
Run Code Online (Sandbox Code Playgroud)

php phpunit pdo unit-testing zend-framework3

16
推荐指数
1
解决办法
870
查看次数

如何在 PHPUnit 9.5.20 中隐藏“#StandWithUkraine”?

我最近升级到 PHPUnit 9.5.20,并注意到#StandWithUkraine每次测试运行都会打印。例如。

Testing started at 10:01 am ...
Running in local mode
PHPUnit 9.5.20 #StandWithUkraine


Time: 00:01.141, Memory: 24.00 MB

OK (1 test, 4 assertions)
Run Code Online (Sandbox Code Playgroud)

php phpunit

16
推荐指数
1
解决办法
1388
查看次数

PHPUnit代码覆盖生成导致内存耗尽

我目前正在使用Zend Framework与PHPUnit一起对应用程序进行单元测试.当Hudson执行PHPUnit shell命令时,在代码覆盖生成期间的某个时间达到最大PHP内存限制.我目前总共有41个测试,有334个断言.

通过使用-d memory_limit=768M开关将memory_limit设置提高到768M,我成功地消除了这个错误; 但是,我担心随着复杂性的增加以及测试/断言的总数,我将没有足够的内存来生成用于代码覆盖率统计的HTML.

操作系统: CentOS 5.5
控制面板: WHM/cPanel
CI服务器: Hudson

/usr/local/bin/phpunit 
  --verbose  
  -d memory_limit=512M  
  --log-junit ../../build/logs/phpunit.xml   
  --coverage-clover ../../build/logs/coverage/clover.xml   
  --coverage-html ../../build/logs/coverage-html/  
Run Code Online (Sandbox Code Playgroud)

致命错误:允许的内存大小为536870912字节

在提交我的更改并让Hudson处理其余的更改之前,我使用Windows 7进行开发.在W7中运行相同的命令时,内存使用率从未超过340MB.

php phpunit zend-framework hudson jenkins

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

PHPUnit报告的百分比:这意味着什么?

我正在开发我的第一个项目,我正在利用PHPUnit进行单元测试.事情一直在顺利进行; 但是,我已经开始使用最近的测试得到以下输出:

................................................................. 65 / 76 ( 85%)
...........

Time: 1 second, Memory: 30.50Mb

OK (76 tests, 404 assertions)
Run Code Online (Sandbox Code Playgroud)

我找不到任何关于"65/76(85%)"的含义的信息.

有谁知道如何解释这个?

谢谢!

phpunit

15
推荐指数
2
解决办法
1375
查看次数

PHPUnit:从setUp()获取测试类和方法的名称?

PHPUnit setUp()在运行特定测试之前运行测试类的方法.

我为测试类中的每个测试加载特定于测试的灯具,并且不希望明确地这样做.理想情况下,我希望在setUp()方法中自动处理这个问题.

如果该setUp()方法提供测试类名称和测试方法名称,则可以执行此操作.

是否可以在方法中使用测试类和方法的名称setUp()

php phpunit

15
推荐指数
1
解决办法
6709
查看次数

无法在Ubuntu 10.04中安装最新的phpUnit

我正在尝试在Ubuntu 10.04中安装PHPUnit但我收到这些错误消息

sudo pear install -a pear.phpunit.de/PHPUnit
Duplicate package channel://pear.phpunit.de/File_Iterator-1.3.3 found
Duplicate package channel://pear.phpunit.de/File_Iterator-1.3.2 found
install failed
Run Code Online (Sandbox Code Playgroud)

我尝试重新安装PEAR,升级它; 更新了PEAR和PHPUnit通道; 清除了PEAR的缓存,但仍然没有运气,我不断得到同样的错误.

有没有人有同样的问题,知道如何解决它?

谢谢.

ubuntu pear phpunit

15
推荐指数
1
解决办法
3631
查看次数

PHPUnit和Selenium例子17.1

我正在尝试使用selenium 17.1(链接)从PHPUnit运行示例

我已完成所有安装但仍然失败.

我得到:

 1) WebTest::testTitle
BadMethodCallException: The command http://localhost:4444/wd/hub/session/url is not recognized by the server.
Run Code Online (Sandbox Code Playgroud)

我没有改变任何例子.Selenium服务器正在运行.

我无法弄清楚出了什么问题.救命?

回答:

请参阅@ rutter的评论: 你知道你正在运行什么版本的PHPUnit_Selenium吗?报告自1.3.2(changelog,pull request)起固定. - 车辙

除此之外,该项目2周后再次开始工作.我认为简单的重新安装就是它所需要的一切.:)

php selenium phpunit unit-testing exception

15
推荐指数
1
解决办法
1079
查看次数

phpunit命令不适用于Windows 7上的laravel 4

我最近安装了laravel并在/ tests目录中编写了一些测试,但是当我phpunit在cmd中使用同一个文件夹phpunit.xml时,它说'phpunit' is not recognized as an internal or external command,operable program or batch file..我正在使用Windows 7.我该怎么办?

php phpunit unit-testing laravel

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