name = 'bicycle'; $this->assertSame('bicycle', $model->name); } public function testGetMissingAttributeReturnsNull(): void { $model = new Model(); $this->assertNull($model->missing); } public function testSetWritesAttribute(): void { $model = new Model(); $model->name = 'bicycle'; $this->assertSame('bicycle', $model->name); } public function testIsset(): void { $model = new Model(); $model->name = 'bicycle'; $this->assertTrue(isset($model->name)); $this->assertFalse(isset($model->missing)); } public function testToArray(): void { $model = new Model(); $model->id = 1; $model->name = 'bicycle'; $this->assertSame(['id' => 1, 'name' => 'bicycle'], $model->toArray()); } public function testPdoFetchClassPopulatesRealProperties(): void { // PDO::FETCH_CLASS выставляет свойства напрямую, минуя __set() — проверяем именно это, // не общий __get/__set (см. PHP-документацию по FETCH_CLASS: свойства до конструктора). $pdo = new PDO('sqlite::memory:'); $pdo->exec('CREATE TABLE t (id INTEGER, name TEXT)'); $pdo->exec("INSERT INTO t (id, name) VALUES (1, 'bicycle')"); $model = $pdo->query('SELECT * FROM t')->fetchObject(Model::class); $this->assertInstanceOf(Model::class, $model); $this->assertSame('bicycle', $model->name); $this->assertSame(['id' => 1, 'name' => 'bicycle'], $model->toArray()); } }