Я делаю новый и чистый проект Codeigniter 2.2.1 для проверки этой проблемы.
моя среда:
MacOSX 10.10 PHP 5.6.8 (cli) (built: Apr 20 2015 10:59:03) Copyright (c) 1997-2015 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans Codigniter 2.2.1 Codeception: * Codeception/aspectmock: *
и я делаю так много взлома, чтобы интегрироваться с кодировкой
наконец, я могу тестировать функцию & get_instance (), и все может нормально работать.
Но,
когда я хочу издеваться над моделью или классом Lib
там не бывает того, чего я ожидаю.
вот мой файл _bootstrap
include __DIR__.'/../vendor/autoload.php'; // composer autoload $kernel = \AspectMock\Kernel::getInstance(); $kernel->init([ 'debug' => true, 'includePaths' => [ __DIR__.'/../application', __DIR__.'/../system', ], "excludePaths" => [ __DIR__ ], "cacheDir" => "/tmp/mock_cache", "appDir" => __DIR__.'/..', "vendor" => __DIR__.'/../vendor' ]); ..... Codeigniter hack and my autoload .....
и затем я создаю единичный тест
php vendor/bin/codecep g:test unit pub
о, да, я должен создать класс «pub» для папок приложений / моделей
а затем добавьте его в конфигурацию автозагрузки
и класс pub имеет публичную функцию, называемую gogo ()
он вернет строку «123»
class pub extends CI_Model { public function gogo() { return "123"; } }
Я хочу издеваться над этим, чтобы вернуться "456"
поэтому мой тестовый файл
use AspectMock\Test as test; ... protected $CI; protected function _before() { $this->CI = &get_instance(); } protected function _after() { \AspectMock\Test::clean(); } // tests public function testMe() { $mymodel = test::double("pub", ["gogo" => "456"]); $this->assertEquals("456", $this->CI->pub->gogo()); }
результат терпит неудачу
Failed asserting that two strings are equal. --- Expected +++ Actual @@ @@ -'456' +'123'
какой шаг не так?
CodeIgniter не имеет реального автозагрузчика. Попробуйте это: https://github.com/Codeception/AspectMock#without-autoloader