我在我的系统上安装了一个新的PHPUnit副本(Ubuntu 11),但每当我输入phpunit控制台时,我都会收到以下错误:
PHP Fatal error: Call to undefined method PHP_CodeCoverage_Filter::getInstance() in /usr/bin/phpunit on line 39
据我所知,我安装了PHPUnit的代码覆盖率:
>sudo pear install phpunit/PHP_CodeCoverage
phpunit/PHP_CodeCoverage is already installed and is the same as the released version 1.1.1
install failed
为什么我会收到此错误,如何解决?
我目前正在使用PHPUnit来尝试和我正在编写的内容一起开发测试,但是,我正在编写会话管理器,并且遇到了这样的问题......
Session处理类的构造函数是
private function __construct()
{
if (!headers_sent())
{
session_start();
self::$session_id = session_id();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,由于PHPUnit在开始测试之前发送文本,因此对此Object的任何测试都会返回失败的测试,因为HTTP"Headers"已经发送...
是否有一个简单的"Web界面"来运行PHPUnit测试套件?即在命令行上运行测试的PHP脚本,并输出格式良好的HTML结果.
我开发Web应用程序,日常工作流程通常在IDE和浏览器之间切换.我想在同一环境中进行单元测试.
我正在寻找一些非常简单且基于PHP的东西 - 我打算进入phpUnderControl(它具有我正在寻找的功能)但还没有.
我正在寻找测试以下静态方法的最佳方法(特别是使用Doctrine模型):
class Model_User extends Doctrine_Record
{
public static function create($userData)
{
$newUser = new self();
$newUser->fromArray($userData);
$newUser->save();
}
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我会使用模拟对象来确保调用"fromArray"(使用提供的用户数据)和"save",但这是不可能的,因为该方法是静态的.
有什么建议?
对不起另一个'phpunit不起作用'的问题.它曾经工作多年了.今天我重新安装了PEAR和phpunit,原因与此问题无关.现在,当我像往常一样运行phpunit时.什么都没发生.cli只是向我展示了一条新线,没有任何输出.
有没有人遇到过这个问题,或者有什么可能导致它的问题.
PHPUnit Version: 3.5.15
PEAR Version: 1.9.4
PHP Version: 5.3.8
Windows 7
Run Code Online (Sandbox Code Playgroud) 我正在制作一个API,Laravel 5我正在测试它PHPUnit.我需要测试遗留功能的兼容性,这是一个XML POST.截至目前,我的第一个测试看起来像:
public function testPostMessages()
{
$response = $this->call('POST', 'xml');
$this->assertEquals(200, $response->getStatusCode());
}
Run Code Online (Sandbox Code Playgroud)
这传递得很好.我的列表中的下一步实际上是通过POST发送XML数据.所以对于我的第二次测试,我有:
public function testPostMessagesContent()
{
$response = $this->call('POST', 'xml');
$this->assertTrue(is_valid_xml($response->getContent()));
}
Run Code Online (Sandbox Code Playgroud)
此测试失败.但是,我没有发送我的XML数据.我如何发送XML?
现在,之后我需要添加功能以从请求中获取内容.我知道有一个Request对象我可以与之交互,但我不确切知道要调用哪种方法.如何从控制器中获取XML?
在此期间我能够得到一些结果.我目前的测试看起来像这样:
public function testPostMessagesContent()
{
$response = $this->call('POST', 'xml', array('key' => 'value'), array(), array(), array('content' => 'content'));
$this->assertContains('~', $response->getContent());
}
Run Code Online (Sandbox Code Playgroud)
我只有波浪号,因为我知道它不匹配,所以我可以看到整个响应.在XmlController.php我有:
class XmlController extends Controller {
public function index(Request $request)
{
return $request;
}
}
Run Code Online (Sandbox Code Playgroud)
我的输出PHPUnit如下:
1) XmlTest::testPostMessagesContent
Failed asserting …Run Code Online (Sandbox Code Playgroud) 从我读过的内容来看,似乎我应该能够设置一个文件夹,例如tests /,用单元测试类放入一些文件,然后在该文件上运行phpunit并让它找到并运行测试.
无论出于何种原因,在我的安装中(在OS X上),它认为文件夹tests /是一个文件,或者看起来如此:
$ ls tests
test1.php test2.php
$ phpunit tests/test1.php
PHPUnit 3.5.3 by Sebastian Bergmann.
F
Time: 0 seconds, Memory: 5.00Mb
There was 1 failure:
1) FailingTest::testFail
Your test successfully failed!
/Users/****/tmp/tests/test1.php:4
FAILURES!
Tests: 1, Assertions: 0, Failures: 1.
$ phpunit tests/test2.php
PHPUnit 3.5.3 by Sebastian Bergmann.
.
Time: 0 seconds, Memory: 5.00Mb
OK (1 test, 1 assertion)
$ phpunit tests
PHP Fatal error: Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither "tests.php" nor "tests.php" could be opened.' in …Run Code Online (Sandbox Code Playgroud) 我想用不同的预期参数两次调用我的模拟方法.这不起作用,因为expects($this->once())第二次调用会失败.
$mock->expects($this->once())
->method('foo')
->with('someValue');
$mock->expects($this->once())
->method('foo')
->with('anotherValue');
$mock->foo('someValue');
$mock->foo('anotherValue');
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
$mock->expects($this->exactly(2))
->method('foo')
->with('someValue');
Run Code Online (Sandbox Code Playgroud)
但是如何添加with()来匹配第二个调用?
我对测试世界很陌生,我想确保我走在正确的轨道上.
我正在尝试使用phpunit在symfony2项目中设置单元测试.
PHPUnit正在运行,简单的默认控制器测试工作正常.(但这不是关于功能测试,而是单元测试我的应用程序.)
我的项目在很大程度上依赖于数据库交互,据我所知,从phpunit的文档中,我应该建立一个基于类的类\PHPUnit_Extensions_Database_TestCase,然后为我的数据库创建fixtures并从那里开始工作.
然而,symfony2只提供了一个WebTestCase只从\PHPUnit_Framework_TestCase开箱即用的类.
所以我是正确的,我认为我应该创建自己的DataBaseTestCase主要复制WebTestCase,唯一的区别是它扩展\PHPUnit_Extensions_Database_TestCase并实现其所有抽象方法?
或者是否有另一个"内置"推荐的symfony2工作流程涉及以数据库为中心的测试?
由于我想确保我的模型存储和检索正确的数据,我不想最终意外地测试学说的细节.
我正在尝试学习如何使用phpunit和laravel进行测试.使用phpunit命令启动测试时,我收到警告:
There was 1 failure:
1) Warning
No tests found in class "PostsTest".
FAILURES!
Tests: 2, Assertions: 1, Failures:
Run Code Online (Sandbox Code Playgroud)
我的测试类名和文件名匹配.我已经阅读了有关不匹配名称的其他问题.我的文件名是PostsTest.php和我的测试文件:
class PostsTest extends ApiTester {
public function it_fetches_posts()
{
$this->times(5)->makePost();
$this->getJson('api/v1/posts');
$this->assertResponseOk();
}
private function makePost($postFields=[])
{
$post = array_merge([
'title' => $this->fake->sentence,
'content' => $this->fake->paragragraph
], $postFields);
while($this->times --)Post::create($post);
}
}
Run Code Online (Sandbox Code Playgroud)
如果有必要,我的ApiTester:
use Faker\Factory as Faker;
class ApiTester extends TestCase {
protected $fake;
protected $times = 1;
function __construct($faker)
{
$this->fake = Faker::create();
}
} …Run Code Online (Sandbox Code Playgroud)