2017-10-11 96 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类,所以如果你有从类调用更多的静态功能,你需要嘲笑他们为好。