Hello
I need to mock requests to a class with PHPUnit. I've noticed it is possible to mock a request thanks this post: https://forum.phalcon.io/discussion/1526/mocking-requests-for-unit-tests
However when I run the test I receive a message that the RequestMock class cannot be found. What am I doing wrong? I've tried adding the RequestMock class to the test namespace but that doesn't seem to help.
Test class:
<?php
namespace Phalcon\Test;
use Phalcon\Di;
/**
* Class ControllerBaseTest
*/
class ControllerBaseTest extends \UnitTestCase {
public function setUp(){
parent::setUp();
$this->di->set(
"request",
new Phalcon\Test\RequestMock()
);
$this->di->set(
"response",
"Phalcon\\Http\\Response"
);
}
}
RequestMock class:
<?php
namespace Phalcon\Test;
use Phalcon\Http\Request;
class RequestMock extends Phalcon\Http\Request
{
/**
* @var string|null Holds the raw body to be used for tests
*/
static protected $raw_body = null;
/**
* Override the method to allow us to get a raw body, set for tests
*
* @return string
*/
public function getRawBody()
{
return self::$raw_body;
}
/**
* Sets the raw body to be used in tests
*
* @param string $raw_body The raw body to be set and used for tests
*/
public function setRawBody($raw_body)
{
self::$raw_body = $raw_body;
}
}
Error message:
[email protected]:/vagrant/www/ontrack/tests$ phpunit
PHPUnit 5.7.9 by Sebastian Bergmann and contributors.
Runtime: PHP 5.6.29-1+deb.sury.org~trusty+1 with Xdebug 2.5.0
Configuration: /vagrant/www/ontrack/tests/phpunit.xml
.PHP Fatal error: Class 'Phalcon\Test\Phalcon\Test\RequestMock' not found in /vagrant/www/ontrack/tests/app/controllers/api/ControllerBaseTest.php on line 16
PHP Stack trace:
PHP 1. {main}() /home/vagrant/.composer/vendor/phpunit/phpunit/phpunit:0
PHP 2. PHPUnit_TextUI_Command::main() /home/vagrant/.composer/vendor/phpunit/phpunit/phpunit:52
PHP 3. PHPUnit_TextUI_Command->run() /home/vagrant/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php:118
PHP 4. PHPUnit_TextUI_TestRunner->doRun() /home/vagrant/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php:188
PHP 5. PHPUnit_Framework_TestSuite->run() /vagrant/www/ontrack/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:491
PHP 6. PHPUnit_Framework_TestSuite->run() /vagrant/www/ontrack/vendor/phpunit/phpunit/src/Framework/TestSuite.php:728
PHP 7. PHPUnit_Framework_TestCase->run() /vagrant/www/ontrack/vendor/phpunit/phpunit/src/Framework/TestSuite.php:728
PHP 8. PHPUnit_Framework_TestResult->run() /vagrant/www/ontrack/vendor/phpunit/phpunit/src/Framework/TestCase.php:927
PHP 9. PHPUnit_Framework_TestCase->runBare() /vagrant/www/ontrack/vendor/phpunit/phpunit/src/Framework/TestResult.php:709
PHP 10. Phalcon\Test\ControllerBaseTest->setUp() /vagrant/www/ontrack/vendor/phpunit/phpunit/src/Framework/TestCase.php:968
Fatal error: Class 'Phalcon\Test\Phalcon\Test\RequestMock' not found in /vagrant/www/ontrack/tests/app/controllers/api/ControllerBaseTest.php on line 16
Call Stack:
0.0002 229472 1. {main}() /home/vagrant/.composer/vendor/phpunit/phpunit/phpunit:0
0.0043 647760 2. PHPUnit_TextUI_Command::main() /home/vagrant/.composer/vendor/phpunit/phpunit/phpunit:52
0.0043 648512 3. PHPUnit_TextUI_Command->run() /home/vagrant/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php:118
0.1189 3668464 4. PHPUnit_TextUI_TestRunner->doRun() /home/vagrant/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php:188
0.1648 4221920 5. PHPUnit_Framework_TestSuite->run() /vagrant/www/ontrack/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:491
0.6650 5534296 6. PHPUnit_Framework_TestSuite->run() /vagrant/www/ontrack/vendor/phpunit/phpunit/src/Framework/TestSuite.php:728
0.6677 5537856 7. PHPUnit_Framework_TestCase->run() /vagrant/www/ontrack/vendor/phpunit/phpunit/src/Framework/TestSuite.php:728
0.6677 5538480 8. PHPUnit_Framework_TestResult->run() /vagrant/www/ontrack/vendor/phpunit/phpunit/src/Framework/TestCase.php:927
0.6701 5541152 9. PHPUnit_Framework_TestCase->runBare() /vagrant/www/ontrack/vendor/phpunit/phpunit/src/Framework/TestResult.php:709
0.6716 5558352 10. Phalcon\Test\ControllerBaseTest->setUp() /vagrant/www/ontrack/vendor/phpunit/phpunit/src/Framework/TestCase.php:968
[email protected]:/vagrant/www/ontrack/tests$
Folder structure:
- root
- - app
- - tests
- - - app
- - - - controllers
- - - - - api
- - - - - - ControllerBaseTest.php
- - - mocks
- - - - RequestMock.php
Thanks in advance for any help! If you need more information/code. Please let me know and I'll happily provide it :)