簡體   English   中英

使用Silex \\ Application作為參數的單元測試方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM