Ошибка теста PHPUnit: объект класса (…) не может быть преобразован в строку

Прежде всего, я новичок в тестировании PHPUnit и PHP, извините, если мне не хватает чего-то слишком очевидного.

Хорошо, теперь, на мой вопрос: я использую виртуальную файловую систему под названием VfsStream проверить функцию unlink( ). По какой-то причине в моем тестировании произошла эта ошибка:

[bianca@cr-22ncg22 tests-phpunit]$ phpunit
PHPUnit 4.6.10 by Sebastian Bergmann and contributors.

Configuration read from /var/www/html/tests-phpunit/phpunit.xml

E

Time: 27 ms, Memory: 4.50Mb

There was 1 error:

1) test\UnlinkTest\UnlinkTest::testUnlink
Object of class App\Libraries\Unlink could not be converted to string

/var/www/html/tests-phpunit/test/UnlinkTest.php:21
/home/bianca/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php:153
/home/bianca/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php:105

FAILURES!
Tests: 1, Assertions: 0, Errors: 1.

Я знаю, что-то с моим классом Unlink и что он возвращает, но я не знаю, что это такое.

Класс, который я тестирую:

class Unlink {

public function unlinkFile($file) {

if (!unlink($file)) {
echo ("Error deleting $file");
}
else {
echo ("Deleted $file");
}

return unlink($file);
}

}

?>

Класс, где мои тесты:

use org\bovigo\vfs\vfsStream;
use App\Libraries\Unlink;

class UnlinkTest extends \PHPUnit_Framework_TestCase {

public function setUp() {
$root = vfsStream::setup('home');
$removeFile = new Unlink();
}

public function tearDown() {
$root = null;
}

public function testUnlink() {
$root = vfsStream::setup('home');
$removeFile = new Unlink();
vfsStream::newFile('test.txt', 0744)->at($root)->setContent("The new contents of the file");
$this->$removeFile->unlinkFile(vfsStream::url('home/test.txt'));
$this->assertFalse(var_dump(file_exists(vfsStream::url('home/test.txt'))));
}

}

?>

Кто-нибудь может помочь мне это исправить?

1

Решение

Ошибка, которую вы получаете, заключается в том, что изначально вы создали эту локальную переменную:

$removeFile = new Unlink();

Но тогда вы ссылаетесь на это как $this->$removeFile когда вы делаете:

$this->$removeFile->unlinkFile(vfsStream::url('home/test.txt'));

Это не правильно; вы можете использовать это там, где у вас есть переменная класса, и вы хотите обращаться к ней динамически. например

class YourClass {
public $foo;
public $bar;

public function __construct() {
$this->foo = 'hello';
$this->bar = 'world';
}

public function doStuff() {
$someVariable = 'foo';

echo $this->$someVariable;  // outputs 'hello'
}
}

Все, что вам нужно сделать, это избавиться от $thisи измените его на:

$removeFile->unlinkFile(vfsStream::url('home/test.txt'));
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]