Дразнящего ядром PHP функции немного сложнее.
Я думаю, у вас есть что-то подобное в вашей модели сообщений.
public function processFile($file)
{
if (is_uploaded_file($file)) {
//process the file
return true;
}
return false;
}
И у вас есть соответствующий тест, подобный этому.
public function testProcessFile()
{
$actual = $this->Posts->processFile('noFile');
$this->assertTrue($actual);
}
Поскольку вы ничего не загружаете во время тестового процесса, тест всегда терпит неудачу.
Вы должны добавить второе пространство имен в начале вашего PostsTableTest.php, даже имея больше пространств имен в одном файле, является плохой практикой.
<?php
namespace {
// This allows us to configure the behavior of the "global mock"
// by changing its value you switch between the core PHP function and
// your implementation
$mockIsUploadedFile = false;
}
Чем вы должны иметь свое первоначальное объявление пространства имен в фигурных скобках.
namespace App\Model\Table {
И вы можете добавить метод PHP ядра перезапись
function is_uploaded_file()
{
global $mockIsUploadedFile;
if ($mockIsUploadedFile === true) {
return true;
} else {
return call_user_func_array('\is_uploaded_file',func_get_args());
}
}
//other model methods
} //this closes the second namespace declaration
Больше на CakePHP модульного тестирования здесь: http://www.apress.com/9781484212134