扩展Laravel的抽象TestCase类时出错(错误是说我的扩展类必须是抽象的)

时间:2014-05-03 23:23:48

标签: php laravel phpunit

我希望那里的人可以帮助我。我正在使用laravel 4,我正在编写我的第一次单元测试一段时间但遇到了麻烦。我试图扩展TestCase类,但我收到以下错误:

PHP Fatal error:  Class registrationTest contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Illuminate\Foundation\Testing\TestCase::createApplication) in /home/john/www/projects/MyPainChart.com/app/tests/registrationTest.php on line 4

现在如果我有这个权利,那么错误就是指一个方法是抽象的事实,那么它所在的类也必须是抽象的。从下面的TestCase类可以看出它是抽象的。我已经搜索了这个错误,但是已经画了一个空白。

尝试在Laracasts https://laracasts.com/lessons/tdd-by-example上进行此演员表,尽管您必须是观看该视频的订阅者,但您可以看到我与Jeffrey Way没有任何不同。

我的测试:

<?php

class registrationTests extends \Illuminate\Foundation\Testing\TestCase
{

    /**
     * Make sure the registration page loads
     * @test
     */
    public function make_sure_the_registration_page_loads_ok()
    {
        $this->assertTrue(true);
    }
}

TestCase类的开头:

<?php namespace Illuminate\Foundation\Testing;

use Illuminate\View\View;
use Illuminate\Auth\UserInterface;

abstract class TestCase extends \PHPUnit_Framework_TestCase {

顺便说一下 - Laravel测试类默认不自动加载,因此我尝试了两个完全限定的类名,并使用Illuminate \ Foundation \ Testing,然后只扩展TestCase。我知道它可以看到它,因为我没有完全限定它抱怨该课程无法找到的名称。我也试过了:

composer dump-autoload

composer update

任何帮助表示赞赏

3 个答案:

答案 0 :(得分:8)

根据您的错误消息:Class registrationTest contains 1 abstract method Base Class包含abstract method,当Child Class使用抽象方法扩展另一个类时,子类应实现抽象方法可在Base class中找到。所以,registrationTest是子类,\Illuminate\Foundation\Testing\TestCase是基类,它包含一个抽象方法:

\Illuminate\Foundation\Testing\TestCase中的抽象方法:

abstract public function createApplication();

因此,在您的child class/registrationTest中,您必须实施此方法:

public function createApplication(){
    //...
}

但是,实际上您不需要直接扩展\Illuminate\Foundation\Testing\TestCase,因为在app/tests文件夹中有一个类TestCase/TestCase.php,您可以扩展此类:

// In app/tests folder
class registrationTest extends TestCase {
    //...
}

TestCase.php类看起来像这样:

class TestCase extends Illuminate\Foundation\Testing\TestCase {

public function createApplication()
{
        $unitTesting = true;
        $testEnvironment = 'testing';
        return require __DIR__.'/../../bootstrap/start.php';
    }
}

请注意,TestCase已经实现了抽象方法createApplication,因此您无需在课程中扩展它。您应该使用TestCase类作为基类来创建测试用例。因此,在app/tests文件夹中创建测试并创建类:

class registrationTest extends TestCase {
    public function testBasicExample()
    {
        $crawler = $this->client->request('GET', '/');
        $this->assertTrue($this->client->getResponse()->isOk());
    }
}

阅读Class Abstraction

答案 1 :(得分:0)

首先进入composer.json并添加

import Pagination from "react-js-pagination";
<Pagination
        activePage={this.state.activePage}
        itemsCountPerPage={3}
        totalItemsCount={450}
        pageRangeDisplayed={3}
        onChange={this.handlePageChange}
      />

然后运行作曲家更新 然后

路径 / test / 中的 TestCase.php 类应类似于

"scripts" : {"test" : "vendor/bin/phpunit"
    }

然后您的 registrationTests 类应如下所示

<?php

namespace Tests;

use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
use Illuminate\Support\Facades\Artisan;

abstract class TestCase extends BaseTestCase {
    use CreatesApplication;
}

答案 2 :(得分:0)

以下是全班最主要的摄入依赖情况,你很好,

<?php

namespace YOUR_CLASS_PATH;

use Tests\TestCase;

class UserTest extends TestCase{
     ...//your business logic here
}

我希望这行得通。