2017-10-11 3 views
1

aufrufen Ich versuche, einen Test für eine Methode in der Klasse unten zu schreiben. Wie auch immer, wenn ich den Test ausführen bekomme ich den Fehler, dass get_b64 nie ausgeführt wird? Ich sehe nicht, wie das nicht läuft.Spott kann meine Methode nicht in Testmethode

Ich hatte ein wenig Einblick in die Spottdokumentation zum Testen statischer Methoden, aber soweit ich das beurteilen kann, liegt dieser Fehler nicht daran?

Was muss ich mit meiner Teststrategie ändern oder in der Lage sein, den Funktionsaufruf im verspotteten Objekt zu verspotten?

Klasse:

namespace App\Services\Steam; 

use App\Services\Steam\Utils; 

class Steam 
{ 
    public function profile(string $steamID) 
    { 
     $b64 = Utils::get_b64($steamID); 

     if ($b64 === null) { 
      throw new \App\Exceptions\InvalidSteamId(); 
     } 

     return new Profile($b64); 
    } 
} 

Testcase:

public function test_create_user_object() 
{ 
    $id = "123" 
    $utilsMock = Mockery::mock(\App\Services\Steam\Utils::class); 

    $utilsMock->shouldReceive('get_b64') 
       ->once() 
       ->with($id) 
       ->andReturn($id); 

    $steam = new \App\Services\Steam\Steam(); 
    $steam->profile($id); 
} 

Antwort

0

Sie get_b64 statisch nennen, das heißt, sie aus der Klasse aufgerufen wird, kein Objekt.

solche Anrufe verspotten Sie aliases verwenden müssen:

public function test_create_user_object() 
{ 
    $id = "123" 
    $utilsMock = Mockery::mock('alias:\App\Services\Steam\Utils'); 

    $utilsMock->shouldReceive('get_b64') 
       ->once() 
       ->with($id) 
       ->andReturn($id); 

    $steam = new \App\Services\Steam\Steam(); 
    $steam->profile($id); 
} 

Beachten Sie, dass es die Utils Klasse vollständig ersetzt, wenn Sie also mehr statische Funktionen aus der Klasse aufgerufen haben, müssen Sie sie verspotten als Gut.

Verwandte Themen