私はASP.NET MVCに取り掛かりつつありますし、単体テストも初めてです。複雑なviewModelsを使用したユニットテストコントローラの動作
私は、ビューモデルを使用してインデックスビューを設定するコントローラーアクションを持っています。コントローラのコンストラクタで偽のサービスクラスを渡すことができるのでコントローラの動作をテストするのは簡単ですが、私のviewmodelは非常に複雑で、インスタンス化時には独自のサービスクラスを取得します。
コードが...私は願っています。この明確にすべきである
コントローラのアクション:
Function Index(ByVal id As Integer?) As ActionResult
Dim totalCount As Integer = 0
Dim selectedClient As Integer
If id Is Nothing Then
selectedClient = _portalClientService.GetFirstClient().ID
Else
selectedClient = id
End If
Dim users As MembershipUserCollection = _membershipService.GetUsersByClientId(selectedClient, 0, 1000, totalCount)
Return View(New UserListViewModel(users, selectedClient))
End Function
のViewModelクラス:
Public Class UserListViewModel
Private _clientService As IPortalClientService
Public Sub New(ByVal users As MembershipUserCollection, ByVal selectedClient As Integer)
Me.New(users, selectedClient, Nothing)
End Sub
Public Sub New(ByVal users As MembershipUserCollection, ByVal selectedClient As Integer, ByVal clientService As IPortalClientService)
_users = users
_clientService = If(clientService, New PortalClientService)
_clients = New SelectList(_clientService.GetClients.OrderBy(Function(c) c.ClientName), "ID", "ClientName", selectedClient)
End Sub
Private _users As MembershipUserCollection
Public Property Users() As MembershipUserCollection
Get
Return _users
End Get
Set(ByVal value As MembershipUserCollection)
_users = value
End Set
End Property
Private _clients As SelectList
Public Property Clients() As SelectList
Get
Return _clients
End Get
Set(ByVal value As SelectList)
_clients = value
End Set
End Property
End Class
EDIT:
コントローラのアクションをテストし、ビューモデルに偽のサービスクラスを使用させるにはどうすればよいですか?
最初のコンストラクタを破棄して、常にコントローラからサービスを渡すか、別の方法がありますか?
乾杯、
ニック
おかげで、私が外にすぎないんだけど知って良いことだ:) 主な問題は、ユニットテストでは、私はコントローラに偽のclientserviceクラスを渡すことができるということですが、のviewmodelは、それが独自のサービスクラスとヒットだインスタンス化データベース。 コントローラアクションを変更しないで、コントローラアクションをテストするときに偽のサービスクラスを使用するようにviewmodelを取得する方法はありますか? – Nick