我試圖向一些遺留代碼添加一些單元測試。許多功能與Trace.Write
使用MSTest在ASP.NET中使用Trace.Write()進行單元測試方法
Function FormatDate(ByVal inputAsString As String) As String
Trace.Write("Function FormatDate")
開始當我運行對全套ASP.NET單元測試的屬性測試,時間過久:
<TestMethod(), _
HostType("ASP.NET"), _
UrlToTest("http://localhost:25153/WebSite1"), _
AspNetDevelopmentServerHost("C:\WebSite1", "/WebSite1")>
Public Sub FormatDateTest()
對此,我剛測試的類本身的實例:
<TestMethod(), _
Public Sub FormatDateTest()
這也很快。但我得到一個「對象引用不設置到對象的實例」錯誤,當我在到達
是否有某種方式可以測試我是否運行單元測試而不調用跟蹤?我可以嘲笑一個html對象,以便它不會引發任何問題嗎?我可以推動超出例外嗎?我應該擺脫跟蹤?我喜歡在MsTest中保留測試,因爲我在一個相當嚴格的Microsoft衍生產品商店。
更新
下面是來自NullReferenceException
at System.Web.UI.UserControl.get_Trace()
at Applications.Interface.UCparent.FormatDate(String inputAsString, Boolean isFuzzy, Char& precision)
in \\...\UCparent.ascx.vb:line 285
的Trace.Write
方法返回頁面上調用它的System.Web.TraceContext
堆棧跟蹤。本質上,它是idential編寫Page.Trace.Write
的問題是,使用@添加HttpContext.Current
到單元測試設置的Ross Presser的建議時,它仍會出現下列情況Page.Trace Is Nothing = True
'This Works
HttpContext.Current.Trace.Write("HttpContext.Current")
'This Doesn't
Page.Trace.Write("Page.TraceContext")
'This Doesn't
Trace.Write("Page.TraceContext")
我可以進去更改所有的Trace.Write方法以使用HttpContext而不是默認的頁面上下文,但運行時會遇到與前面相同的問題。 Page
上的Trace
屬性也沒有setter,所以看起來很難只給頁面一些上下文而沒有自然地繼承它。
謝謝!檢查'HttpContext.Current'是否有效,但我當然必須更改調用'Trace.Write'的每行代碼。我更喜歡你的第二種選擇,但即使在我的TestSetup方法中提供了HttpContext之後,我仍然得到一個'NullReferenceException'。 – KyleMit
你能提供'NullReferenceException'的完整堆棧跟蹤嗎? –