2017-10-11 15 views
1

私は以下のクラスのメソッドのテストを作成しようとしています。しかし、テストを実行すると、get_b64が実行されないというエラーが表示されます。これがどうやって動いているのか分かりません。テストメソッドで私のメソッドを呼び出すことができません

私は静的メソッドをテストするための卑劣なドキュメントを少し見てきましたが、私はこのエラーがその原因ではないと言うことができます。

テスト戦略を変更したり、モックされたオブジェクトで関数呼び出しを疑似できるようにするにはどうすればよいですか?

クラス:

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); 
} 

答えて

0

あなたはそれはクラスではなく、オブジェクトから呼び出されることを意味する、静的get_b64を呼び出します。それは完全にUtilsクラスを置き換えるので、あなたは、クラスから呼び出されるより静的な機能を持っている場合、あなたは、それらを模擬する必要があることに注意して

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); 
} 

クマ:あなたはaliasesを使用する必要があり、このような呼び出しを模擬するために

よく

関連する問題