3

アプリの名前空間オブジェクトとインターフェイスを反映するように、tests フォルダーを整理しています。しかし、名前空間を使って TDD を実践しているときに、秩序を維持しようとして問題が発生しました。私は、これらすべてのピースをうまく演奏する方法を完全に失っています。この問題に関するヘルプをいただければ幸いです。

構造:

app/ 
  Acme/ 
    Repositories/ 
      UserRepository.php 
    User.php
  tests/ 
    Acme/ 
      Repositories/ 
        UserRepositoryTest.php 
      UserTest.php

app/Acme/User.php

<?php namespace Acme;

use Eloquent;

class User extends Eloquent {

    protected $guarded = array();

    public static $rules = array();
}

アプリ/テスト/Acme/UserTest.php

<?php

use Acme\User;

class UserTest extends TestCase {

    public function testCanBeLoaded()
    {
        $this->assertInstanceOf(User, new User);
    }
}

PHPUnit の結果:

1) UserTest::testCanBeLoaded
ErrorException: Use of undefined constant User - assumed 'User'
4

1 に答える 1

7

このassertInstanceOfメソッドは、オブジェクトではなく文字列を想定しています。試してみてくださいUser::class。この::class表記法はPHP 5.5 で導入されました。

<?php

use Acme\User;

class UserTest extends TestCase
{
    public function testCanBeLoaded()
    {
        $this->assertInstanceOf(User::class, new User);
    }
}

2015 年 11 月 22 日更新

PHP での今日のベスト プラクティスを使用して、より良いソリューションへの回答を更新しました。

于 2013-10-17T18:04:14.027 に答える