2017-03-03 38 views
4

我正在尋找幫助,爲我們基於JSON API的應用程序創建複雜的測試。Symfony Testing - ClockMock/DateTime

短問題方案:

  • 測試創建臨時實體(比較)
  • EntityManagerMock設置爲等待堅持($ temporaryEntity)
  • 測試呼叫真正的方法與一些參數
  • 方法創建實體並嘗試保存在嘲笑EM
  • 測試失敗b ecause時間變化1秒鐘

enter image description here

我們試圖用ClockMock但它只是對所在班級被稱爲/命名空間的工作。我們的方法是在其他命名空間,實體是在下一個創建。

我們正在尋找解決方案如何臨時覆蓋PHP平臺\ DateTime類 - 或技術如何使用ClockMock項目中的所有名稱空間/類(但僅用於測試)。我們試圖修改基於Symfony的ClockMock - 但是找不到: - /。

有什麼辦法嗎? (我不想使用類似get_declared_class(),並用它調用clockMock ::註冊 - 因爲它是非常緩慢的soloution約15.000測試: - !/

感謝所有

+0

「我們在尋找解決方案如何臨時替代PHP平臺\ DateTime類。」我沒有跟蹤你爲什麼需要或想要這樣做。模擬它如何幫助單元測試? –

+0

你能展示代碼的rilevante部分嗎? – Matteo

+0

我很抱歉,但我必須把代碼粘貼斌:http://pastebin.com/ZhBMrq4P - 這是簡化的,但主要的問題是存在的。問題是預期的持續通話 - 因爲「新的日期時間」有時產生更大的時間(測試時,在轉第二運行)。有soloution與寄存器中的所有類ClockMock - 但它是非常昂貴的時間爲完整的項目。 – Filip

回答

4

的ClockMock不對於new \DateTime()但僅限於基於時間的PHP函數工作

From the announcement of the features

這意味着,你不需要做出一個改變你原有的 代碼,用new DateTime(),必須 取代DateTime::createFromFormat('U', time())使用 嘲笑time()功能時除外。

因此請按建議嘗試:使用帶時間函數的named-constructor替換任何DateTime對象創建。

希望這有助於

+0

它似乎工作!非常感謝! – Filip