如何使用 phpunit 在 Laravel 4 中测试命名空间对象

Posted

技术标签:

【中文标题】如何使用 phpunit 在 Laravel 4 中测试命名空间对象【英文标题】:How to test namespaced objects in Laravel 4 with phpunit 【发布时间】:2013-10-26 08:37:00 【问题描述】:

我正在组织我的测试文件夹以反映我的应用程序中的命名空间对象和接口。但是,在使用命名空间练习 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();

app/tests/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'

【问题讨论】:

$this-&gt;assertInstanceOf('User', new User); 怎么样?那么你收到任何错误消息了吗? 这也是大喊大叫。 1) UserTest::testCanBeLoaded PHPUnit_Framework_Exception: PHPUnit_Framework_Assert::assertInstanceOf() 的参数 #1 必须是类或接口名称 尝试在 Acme 之前添加另一个 \,如下所示:use \Acme\User as User; 【参考方案1】:

assertInstanceOf 方法需要一个字符串,而不是一个对象。试试User::class::class 表示法是 introduced in PHP 5.5

<?php

use Acme\User;

class UserTest extends TestCase

    public function testCanBeLoaded()
    
        $this->assertInstanceOf(User::class, new User);
    

2015 年 11 月 22 日更新

使用当今 PHP 的最佳实践更新了我对更好解决方案的回答。

【讨论】:

我们赢了!!非常感谢!我该回去工作了!

以上是关于如何使用 phpunit 在 Laravel 4 中测试命名空间对象的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Windows 命令提示符在 Laravel 中运行 PHPUnit

在没有 /vendor/bin/ 的 laravel 4 中使用 phpunit

使用 PHPUnit 对 Laravel 4 进行单元测试

将 phpunit 安装到 Laravel 4 站点

如何在Laravel项目中安装PHPunit

如何在 laravel 5.5 中运行 phpunit