[英]Unit test method with Silex\Application as parameter
在我的項目中,我有一個類SessionManager,它為粘性表單等設置和清除會話變量。該類中的每個方法都接受一個Silex \\ Application對象作為參數。 我該如何對這些方法進行單元測試? 在每個測試方法中創建一個Silex應用程序對象? 我是Silex和單元測試的新手,所以不知道如何處理這個問題。
一種方法的示例:
public static function setMessage($message, $messageClass, Application &$app)
{
// store message as array, with content and class keys
$app['session']->set('message', array(
'content' => $message,
'class' => $messageClass
));
}
首先,我認為$app
不應該是SessionManager的依賴項; $app['session']
應該是。 但它也應該是對象的依賴(即:傳遞給構造函數)而不是單個方法。
但這並沒有改變解決問題的策略。 您需要做的就是創建一個Session的模擬,它包含您需要調用的依賴方法,例如:
// in your test class
// ...
public function setup(){
$mockedSession = $this->getMockedSession();
$this->sessionManager = new SessionManager($mockedSession);
}
public function testMessage(){
// test stuff here
}
private function getMockedSession(){
$mockedSession = $this->getMockBuilder('\Symfony\Component\HttpFoundation\Session\Session')
->disableOriginalConstructor()
->setMethods(['set'])
->getMock();
$mockedSession->method('set')
->willReturn('something testable');
return $mockedSession;
}
您可能只需要測試您的setMessage
方法將其$message
和$messageClass
值傳遞給模擬方法:這就是它所做的一切。 在這種情況下,你可能想要一個->with('message', [$testMessage, $testClass])
或者你的模擬中的東西。 確切的實現取決於您想要測試的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.