2017-10-27 14 views
0

Laravel Tinkerを使用して、インターフェイスとしてコンストラクタを持つ新しいオブジェクトを作成しようとしています。 MyClass.phpLaravel Tinkerは、インターフェイスとしてコンストラクタを持つ新しいオブジェクトを作成します。

class MyClass{ 
public function __construct(ApiInterface $APIloader) 
    { 
     $this->APIloader = $APIloader; 
    } 
} 

ApiInterface.php

interface ApiInterface { 
    .. 
    .. 
} 

私はそう私が行っていることということであるティンカーで私のクラスをテストしたい:私が得たエラーがある

php artisan tinker 
>> $a = new App\MyClass(new App\ApiInterface); 

PHP Fatal error: Class 'App\ApiInterface' not found in eval()'d code on line 1 

ティンカーは私がティンカーがクラスとしてインターフェイスを認識していないように感じることができないようにすることはできません

何か考えですか?

ありがとうございました

答えて

5

インターフェイスのインスタンスを作成することはできません。

あなたのコードをテストしたい場合は、ダミークラスを作り、それを使用してください。

class TestApi implements ApiInterface {} 

$a = new App\MyClass(new App\TestApi); 

http://php.net/manual/en/language.oop5.interfaces.php

ダミークラスよりもより良い代替手段は、単にモックオブジェクトを使用することです。彼らは手続き的に同じことを達成する。

https://laravel.com/docs/5.5/mocking

https://phpunit.de/manual/current/en/test-doubles.html

+0

それを手に入れました。ありがとう。 – trinhdh

+0

@trinhdhこの回答が役に立ったとお考えなら、それを受け入れることを検討してください – ljubadr

+0

私はそのような引数としてインターフェイスを配置する必要があります:__construct(ApiInterface $ APIloader) – trinhdh

関連する問題