レガシーコードにいくつかの単体テストを追加しようとしています。関数の多くは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()
これはすぐに機能しますが、「オブジェクトのインスタンスにオブジェクト参照が設定されていません」というエラーが表示されます。Trace.Write()
単体テストを実行していてトレースを呼び出さないかどうかをテストする方法はありますか? 例外をスローしないように html オブジェクトをモックできますか? 例外を超えてプッシュできますか? Trace を削除する必要がありますか? 私はかなり厳密にマイクロソフトの派生製品ショップにいるので、テストを MsTest 内に保持したいと思います。
アップデート
からのスタックトレースは次のとおりです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
呼び出された Page の を返します。本質的に、それは書くことと同じですPage.Trace.Write
問題は、 @ Ross Presserの Unit Test Setup への追加の提案を使用HttpContext.Current
する場合でも、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 を使用することはできますが、これは前と同じ問題に遭遇します。また、Trace
プロパティ onPage
にはセッターがないため、自然に継承せずにページにコンテキストを与えることは難しいようです。