2016-01-19 105 views
1

我有以下問題。我爲我們的web做API,客戶必須在我的函數中使用他的函數作爲回調函數。如何使用nonexist回調類作爲參數測試函數

例子:

UserClass { 
    userMethod() { 
     return $data; 
    } 
} 

MyClass { 
    myFunction (callback) { 
     doingSomething(); 
     doingSomething(); 
     $data = call_user_function($callback); 
     return doingSomethingWithData($data); 
    } 
} 

問題是,這是API和我無法實現的客戶類的回調,因爲不存在的,但我需要測試的功能將與預期的數據的工作。有沒有可能如何使用phpunit測試我的功能?

非常感謝

+0

在例子中,您將'UserClass :: userMethod()'作爲回調傳遞給'MyClass :: MyFunction'?你想要測試哪些? –

+0

我需要測試myFunction(),它返回正確的數據。 – XWizard

回答

2

只是通過在返回預期結果的一個,你可以預測輸出匿名函數。確保它正確處理垃圾數據輸出/邊緣情況。 您的測試可以看看這樣的事情:

class MyClassTest extends PHPUnit_Framework_TestCase 
{ 
    /** 
    * @dataProvider myFunctionProvider 
    */ 
    public function testMyFunction($callback, $expected) 
    { 
     $this->assertEquals(
      // Just as example you can create instance of class and call it. 
      MyClass::MyFunction($callback), 
      $expected 
     ); 
    } 

    public function myFunctionProvider() 
    { 
     return [ 
      [ function() { return 'a';}, 'a'], 
      [ function() { return 'c';}, 'c'], 
      [ function() { return 'b';}, 'b'] 
     ]; 
    } 
} 

作爲一個側面說明更改您的代碼:

function MyFunc(callable $callback) { 

} 

這將確保你只有在調用你的函數。

相關問題