我想寫一些先前編寫的代碼之前,我開始用它來測試它的測試。我遇到了控制器方法引用T4MVC爲圖像和鏈接所做的一些靜態變量的問題。它實際上和我以前的問題here一樣,但它不在構造函數中。T4MVC和測試與MvcContrib.TestHelpers問題與靜態鏈接的內容
的問題是這樣的代碼:
if (User.IsInRole("Rate Admin") || User.IsInRole("Administrator"))
{
_ratesViewData.ActionLinks = new List<CustomActionLink>
{
new CustomActionLink("Edit",
editPath + Resources.DelimeterHyphen,
Links.Content.Images.openwhite_gif),
new CustomActionLink("Delete",
statusPath + Resources.DelimeterHyphen,
Links.Content.Images.openwhite_gif)
};
}
的問題是Links.Content.Images.openwhite_gif,在T4MVC下生成的代碼從靜態方法調用ProcessVirtualPath VirtualPathUtility.ToAbsolute。我似乎無法模擬ProcessVirtualPath或VirtualPathUtility。
現在上面的ProcessVirtualPath評論說,它是通過委託調用,以允許它被替換爲單元測試。代表是:
public static Func<string, string> ProcessVirtualPath = ProcessVirtualPathDefault;
如何替換正在調用ProcessVirtualPath以允許進行單元測試。我不在乎它是否真的有效,我只是不想讓它炸燬。我可以從我的測試方法做到這一點嗎?在不更改代碼的情況下測試它是否在非測試項目中進行調試?
另外一個相關的問題是什麼是上面的一段代碼的最佳做法?在哪裏應該有基於權限的條件代碼?甚至行動鏈接。我不確定他們爲什麼處於viewdata模式。
好的我確實得到了這個與評論中提到的代碼一起工作。
T4MVCHelpers.ProcessVirtualPath = (s) => "~/Content/Images";
但只有當試驗是單獨跑,需要如果與使用TestControllerBuilder類,不設置其他的測試運行,這將失敗的任何測試。爲什麼?
我有同樣的問題。這沒有任何意義。我將代理設置爲我自己的,但該設置被忽略。我不能爲我的生活弄清楚如何在運行時不能設置靜態代理。 –
我沒有得到這個與T4MVCHelpers.ProcessVirtualPath =(s)=>「〜/ Content/Images」一起工作;但是......它只在測試本身運行時才起作用,而不是在包含所有其他測試的組中。使它變得毫無用處。 – nportelli