我使用PHPUnit进行单元测试,但是当触发致命错误时,脚本会死,而且我没有正确的PHPUnit输出.
我希望PHPUnit输出保持正确格式化,因为它是由Eclipse的插件读取的.实际上,致命错误会停止PHPUnit,而在Eclipse中,插件无法解释任何内容(因为PHPUnit脚本有错误,而不是处理它).
谢谢
我正在尝试让PHPUnit在我的开发环境中运行,但是当我在脚本中包含PHPUnit时,我遇到了一些障碍.我知道我需要在PHP上设置include路径,但是我试过的每个组合都会失败,而编译器看不到PHPUnit_Framework_TestCase类.
我刚刚在PHP和PEAR上运行了更新,并且计算机上安装了PHPUnit,因为我可以通过命令行访问它.
PHPUnit安装在/ usr/share/php/PHPunit
梨在/ usr/share/php/PEAR
有什么我想念的吗?这是我第一次尝试使用PHPUnit甚至是PEAR的东西.我在Ubuntu 10.10上.任何帮助,将不胜感激.
编辑 - 我的PHP ini中的include路径中没有任何内容.现在代码就是这样
<?php
class Stacktest extends PHPUnit_Framework_TestCase
{
}
Run Code Online (Sandbox Code Playgroud)
我不知道要在include路径中包含什么或设置什么,因为对于关于PHPUnit的网络上的所有信息来说,这些一点点的信息都是严重缺失的.
我有以下测试用例:
include_once('../Logger.php');
class LoggerTest extends PHPUnit_Framework_TestCase {
public function providerLogger() {
return new Logger;
}
/**
* @dataProvider providerLogger
*/
public function testAddStream($logger) {
$this->assertTrue(false);
}
}
Run Code Online (Sandbox Code Playgroud)
当我在PHPUnit中运行它时,我得到:
PHPUnit 3.4.14 by Sebastian Bergmann.
..........
Time: 0 seconds, Memory: 5.75Mb
OK (1 tests, 0 assertions)
Run Code Online (Sandbox Code Playgroud)
测试应该失败,但事实并非如此.我试过:
public function providerLogger() {
return array(new Logger);
}
Run Code Online (Sandbox Code Playgroud)
但我得到:
The data provider specified for LoggerTest::testAddStream is invalid.
Run Code Online (Sandbox Code Playgroud)
我试着宣布它static(就像手册所说的那样),但仍然没有区别.
我记得以前以类似的方式工作,但我可能是错的.我错过了什么?
在此先感谢您的帮助.
PHP 5.3.3上的PHPUnit 3.4.14(取自PEAR)
我有一个控制器,我想为其创建功能测试.该控制器通过MyApiClient类向外部API发出HTTP请求.我需要模拟这个MyApiClient类,所以我可以测试我的控制器如何响应给定的响应(例如,如果MyApiClient类返回500响应它将做什么).
MyApiClient通过标准的PHPUnit mockbuilder 创建类的模拟版本没有问题:我遇到的问题是让我的控制器将此对象用于多个请求.
我目前正在测试中执行以下操作:
class ApplicationControllerTest extends WebTestCase
{
public function testSomething()
{
$client = static::createClient();
$apiClient = $this->getMockMyApiClient();
$client->getContainer()->set('myapiclient', $apiClient);
$client->request('GET', '/my/url/here');
// Some assertions: Mocked API client returns 500 as expected.
$client->request('GET', '/my/url/here');
// Some assertions: Mocked API client is not used: Actual MyApiClient instance is being used instead.
}
protected function getMockMyApiClient()
{
$client = $this->getMockBuilder('Namespace\Of\MyApiClient')
->setMethods(array('doSomething'))
->getMock();
$client->expects($this->any())
->method('doSomething')
->will($this->returnValue(500));
return $apiClient;
}
}
Run Code Online (Sandbox Code Playgroud)
似乎在第二个请求发生时正在重建容器,导致MyApiClient再次实例化.所述MyApiClient …
为了忽略使用PHPUnit的测试,应该在PHP测试方法旁边放置什么属性?
我知道对于NUnit,属性是:
[Test]
[Ignore]
public void IgnoredTest()
Run Code Online (Sandbox Code Playgroud) 我在PHPUnit中运行一个全新的测试套件,我希望看到每个测试的结果,旁边有测试名称.这将使修复损坏的测试和TDD更容易.
PHPunit确实输出了破碎的消息,但经过一段时间后,你的眼睛经历了所有的错误和堆栈跟踪.
.......F...................一旦您的测试套件启动并且稳定,当前类型输出就很棒,但是当您创建套件时...
我已经尝试了这个--verbose参数,但没有用.
我正在尝试为特定目录设置phpunit的代码覆盖率.有人能告诉我有什么区别:
<filter>
<whitelist>
<directory suffix=".php">lib/</directory>
</whitelist>
</filter>
Run Code Online (Sandbox Code Playgroud)
和
<filter>
<whitelist addUncoveredFilesFromWhitelist="true">
<directory suffix=".php">lib/</directory>
</whitelist>
</filter>
Run Code Online (Sandbox Code Playgroud)
和
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">lib/</directory>
</whitelist>
</filter>
Run Code Online (Sandbox Code Playgroud)
目前前两个选项将起作用(具有不同的覆盖数)但第三个选项将失败,其错误类似于如何将未覆盖的文件添加到Yii应用程序的PHPUnit代码覆盖率报告中.
刚刚开始使用phpunit,并希望了解这些白名单选项之间的差异.我阅读了关于此的官方文档,但我不确定我理解.
我不知道它是否与Laravel 5.4有关.当我phpunit在安装laravel 5.4之后运行命令而没有做任何改变我得到Uncaught Error: Call to undefined method PHPUnit_Util_Configuration::getTestdoxGroupConfiguration()但是当我运行php artisan dusk它正常运行
c:\xampp\htdocs\ublocker>phpunit
PHP Fatal error: Uncaught Error: Call to undefined method
PHPUnit_Util_Configuration::getTestdoxGroupConfiguration() in C:\xampp\htdocs\ublocker\vendor\phpunit\phpunit\src\TextUI\TestRunner.php:1046
Stack trace:
#0 C:\xampp\htdocs\ublocker\vendor\phpunit\phpunit\src\TextUI\TestRunner.php(167): PHPUnit_TextUI_TestRunner->handleConfiguration(Array)
#1 C:\xampp\php\pear\PHPUnit\TextUI\Command.php(176): PHPUnit_TextUI_TestRunner->doRun(Object(PHPUnit_Framework_TestSuite), Array)
#2 C:\xampp\php\pear\PHPUnit\TextUI\Command.php(129): PHPUnit_TextUI_Command->run(Array, true)
#3 C:\xampp\php\phpunit(46): PHPUnit_TextUI_Command::main()
#4 {main}
thrown in C:\xampp\htdocs\ublocker\vendor\phpunit\phpunit\src\TextUI\TestRunner.php on line 1046
Fatal error: Uncaught Error: Call to undefined method PHPUnit_Util_Configuration::getTestdoxGroupConfiguration() in C:\xampp\htdocs\ublocker\vendor\phpunit\phpunit\src\TextUI\TestRunner.php:1046
Stack trace:
C:\xampp\htdocs\ublocker\vendor\phpunit\phpunit\src\TextUI\TestRunner.php(167): PHPUnit_TextUI_TestRunner->handleConfiguration(Array)
C:\xampp\php\pear\PHPUnit\TextUI\Command.php(176): PHPUnit_TextUI_TestRunner->doRun(Object(PHPUnit_Framework_TestSuite), Array)
C:\xampp\php\pear\PHPUnit\TextUI\Command.php(129): PHPUnit_TextUI_Command->run(Array, true)
C:\xampp\php\phpunit(46): PHPUnit_TextUI_Command::main()
{main}
thrown in …Run Code Online (Sandbox Code Playgroud) 我希望能够在DateTimePHPUnit或Behat Test的持续时间内为每个实例化实例设置时间.
我正在测试与时间相关的业务逻辑.例如,类中的方法仅返回过去或将来的事件.
如果可能的话,我不想这样做:
写一个包装器DateTime并使用它代替DateTime整个代码.这将涉及重写我当前的代码库.
每次运行测试/套件时动态生成数据集.
所以问题是:是否有可能覆盖DateTimes行为以始终在请求时提供特定时间?
class Testme()
{
public function testMe ($a)
{
if ($a == 1)
{
throw new Exception ('YAY');
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以它很容易测试,如果它抛出异常
/**
* @expectedException Exception
*/
public function test()
{
new Testme(1);
}
Run Code Online (Sandbox Code Playgroud)
但如果它什么都没做呢?
public function test()
{
new Testme(2);
?? ? ? ? ?
}
Run Code Online (Sandbox Code Playgroud) phpunit ×10
php ×7
unit-testing ×3
symfony ×2
behat ×1
dataprovider ×1
datetime ×1
fatal-error ×1
laravel ×1
laravel-5.4 ×1
nunit ×1
pear ×1
testing ×1