2009-06-22 60 views
1

我有一個包裝GetGlobalResourceObject和GetLocalResourceObjet的類,以便它們可以在MVC中輕鬆使用。模型驗證類然後從資源文件中動態加載錯誤消息。問題是單元測試。代碼使用「〜/」,並且當解決方案運行時,一切運行正常,但我看不到如何進行單元測試,因爲我總是收到以下錯誤「System.Web.HttpException:應用程序相對虛擬路徑」〜/ '不能是絕對的,因爲應用程序的路徑是未知的。「單元測試asp.net中的本地和全局資源mvc

引發異常的代碼如下,用於評估表達式並返回全局資源對象。

Private Function GetExpressionFields(ByVal expression As String) As ResourceExpressionFields 
    Return GetExpressionFields(expression, "~/") 
End Function 

Private Function GetExpressionFields(ByVal expression As String, ByVal path As String) As ResourceExpressionFields 
    Dim context As New ExpressionBuilderContext(path) 
    Dim resource_builder As New ResourceExpressionBuilder() 
    Dim fields As ResourceExpressionFields 
    fields = DirectCast(resource_builder.ParseExpression(expression, GetType(String), context), ResourceExpressionFields) 
    Return fields 
End Function 

關於如何測試這個和其他使用資源文件的代碼的任何想法?

回答

3

我採取了一個稍微不同的方法。我使用App_ *目錄之外的資源文件,在這種情況下,IDE會將一個自定義工具添加到該文件中,以生成解決方案中任何位置(包括視圖中)工作的資源的強類型包裝,並在單元測試期間運行: http://odetocode.com/Blogs/scott/archive/2009/07/15/13211.aspx

這不是您的問題的確切答案,但我相信讓App_ *資源在所有情況下都能正確行爲是相當有點工作的。

+0

謝謝,這不是我的問題的確切答案,但它非常好用! – user10479 2009-07-20 11:05:14

0

您就可在您的ResourceExtensions類的屬性,例如布爾IsInTestScope,然後在您的測試類將它放在真實的,裏面方法返回本地化的文本做這樣的事情:

公共靜態字符串資源(這個控制器的控制器,字符串表達式,params對象[]參數)

{

如果(!IsInTestScope)

{

ResourceExpressionFields fields = GetResourceFields(expression,「〜/」);

return GetGlobalResource(fields,args);

}

return string.Empty;

}

0

我發現了一種測試使用App_ *目錄內資源的代碼的方法。 我在我的博客中描述了我的解決方案link text