2017-10-11 112 views
1

我正試圖在下面的類中編寫一個方法的測試。但是,當我運行測試時,我得到的錯誤get_b64永遠不會運行?我不明白這是不是運行。Mockery無法在測試方法中調用我的方法

我已經看了一些關於測試靜態方法的嘲諷文檔,但據我所知,這個錯誤不是由於這個原因造成的?

我需要改變我的測試策略,或者能夠模擬模擬對象中的函數調用?

類:

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

測試用例:

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靜態的,這意味着它從類而不是對象調用。

嘲笑這樣的電話,你需要使用aliases

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

記住,它完全取代Utils類,所以如果你有從類調用更多的靜態功能,你需要嘲笑他們爲好。

相關問題