2010-02-19 43 views
4

單元測試執行重定向的控制器操作的正確方法是什麼?如何在cfwheels中單元測試重定向

更新:我是CFWheels項目的核心開發人員。我問這個問題的全部原因是我目前正在努力增強我們擁有的內置測試框架,並且我想知道如何在CFWheels中實現和實現類似的東西,以便開發人員測試他們的應用程序。

更新:我想出瞭如何測試這個。看起來我們將不得不重寫輪子控制器的內部,以便在動作完成之後執行重定向,並在它傳遞迴調度器之後執行重定向。採用這種方法的唯一方法是,如果您事先採取適當的預防措施,則redirectTo()之後的任何代碼都將被運行;這包括在redirectTo()語句之後放置返回值,或者在您的操作中添加條件檢查以將redirectTo()代碼與其他代碼隔離。它還涉及確保在執行redirectTo()後不會呈現任何其他內容。

+0

我通常只是對模型進行單元測試,而不是控制器。你在使用哪個MVC框架? – Henry 2010-02-19 01:45:20

+0

@henry,我更新了問題以回答您的問題:P – rip747 2010-02-19 13:27:54

+0

您可能會考慮將此問題的標題更改爲「如何對單元測試重定向」或「如何以單元測試cfwheels中的重定向」。這些詞組更有可能與搜索引擎中的用戶搜索查詢匹配,這意味着此頁面將有更大的機會顯示爲最佳結果。這將意味着更多的代表你,而不是尋找具有相同問題的人。 – 2010-02-19 13:42:20

回答

2

這樣的東西變得更容易測試,如果你將重定向機制分解成多個函數:a)確定目標URL的函數和b)執行重定向的函數。

這樣,你可以很容易地測試functionA,而functionA是你想要測試的一個。這是代碼寫道。這是你真正的邏輯所在。 FunctionB不是你的代碼;它是ColdFusion的膽量,並且在測試CFLocation時沒有多少意義。

如果您的任務是實現100%的測試覆蓋率,那麼您可以花費10次測試函數A,在這裏測試您的邏輯的所有不同分支,然後進行一次測試,以functionB的方式執行重定向特里建議;所以通過這種方式,您只能獲得1次慢速測試,而不是10次。

您可以將此方法概括爲用於其他場景:文件系統,webservices,http,ftp,電子郵件等:「提取可控制的內容並想從你無法控制的東西中測試,並且不想測試「

2

您可以使用cfhttp將重定向設置爲false來調用帶有相應URL的控制器。然後測試生成的cfhttp結果結構,它應該有關於重定向到哪裏的信息。

+0

我用這種方法看到的唯一問題是測試可能運行非常慢。如果我不需要發出http請求會更好。我正在考慮的一種方法是使用帶redirectTo()的應用程序變量在測試過程中返回參數struct並繞過cflocation。我唯一的問題是如果在redirectTo()之後還有其他邏輯會發生什麼,那可能會運行。 – rip747 2010-02-19 13:33:01

+1

我會爭辯說,如果你的控制器正在做一個重定向,這個單元測試需要很長的時間纔會被破壞,除非我誤解你正在做的事情。在這種情況下,請在cfhttp上設置超時時間,如果時間過長,則會失敗。 – 2010-02-19 16:21:06