问题
I used to use the method setup of PHPUnit to create a instance for my test methods. But in Laravel 5.8 I can't do it
I've tried both ways, and it's works makes an instance per method how showed below.
This works:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
use App\Service\MyService;
class MyServiceTest extends TestCase
{
/**
* A basic unit test example.
*
* @return void
*/
public function testInstanceOf()
{
$myService = new MyService;
$this->assertInstanceOf( 'App\Service\MyService' , $myService );
}
}
This doesn't works:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
use App\Service\MyService;
class MyServiceTest extends TestCase
{
private $instance;
function setUp(){
$this->instance = new MyService;
}
/**
* A basic unit test example.
*
* @return void
*/
public function testInstanceOf()
{
$myService = $this->instance;
$this->assertInstanceOf( 'App\Service\MyService' , $myService );
}
}
This error message below show in console:
PHP Fatal error: Declaration of Tests\Unit\MyServiceTest::setUp() must be compatible with Illuminate\Foundation\Testing\TestCase::setUp(): void in /home/myproject/tests/Unit/MyServiceTest.php on line 10
回答1:
In Laravel 5.8 I think they added the void typehint to the return type of the setUp method.
So you have to declare that like this:
public function setUp(): void
{
$this->instance = new MyService;
}
Note the : void
after the function arguments to state the return type of that function
来源:https://stackoverflow.com/questions/57582317/how-to-use-the-method-setup-from-phpunit-in-laravel-5-8