ASP.NET開発でもユニットテストがしたい
概要
.Net Core(最近1.0がリリースされましたね)より昔のASP.NETは、IISとがっつり手を握り合っていて、スタティックなオブジェクトがいっぱいあります。
そんなスタティックなオブジェクトを使っていると、ユニットテストを書けません(書いてもぬるぽです)。
それをどうにかしようというのがこの記事です。
HttpContext
リクエストやレスポンスが入っている肝心かなめのオブジェクトです。
HttpContextBaseという抽象クラスがありますが、なんとHttpContextはこれを継承していません。
HttpContextの解決策
HttpContextBaseとHttpContextWrapperを使いましょう。
Injectee.vb
Public Sub New (httpContext As HttpContextBase)
Injector.vb
New Injectee(New HttpContextWrapper(HttpContext.Current))
FormsAuthentication
Form認証にしたときに使うやつです。
FormsAuthenticationの解決策
用意されているラッパはないので、自前でラッパを用意しましょう。
IAuthenticationWrapper.vb
Public Interface IAuthenticationWrapper
Sub SetAuthentication(userName As String, isPersistent As Boolean)
End Interface
AuthenticationWrapper.vb
Public Class AuthenticationWrapper
IAuthenticationWrapper
Sub SetAuthentication(userName As String, isPersistent As Boolean) Implements IAuthenticationWrapper.SetAuthentication
FormsAuthentication.SetCookeiAuthentication(userName, isPersistent)
End Sub
End Class
まとめ
ASP.NETでユニットテストしたいときは、
とにかくラッパ!!