Я только начинаю работать с ASP.NET MVC, и я также новичок в модульном тестировании :) Пока все хорошо.
У меня есть действие контроллера, которое устанавливает представление индекса с помощью модели представления. Тестирование действия контроллера является простым, поскольку я могу передать поддельный класс обслуживания в конструкторе контроллера, но моя модель представления довольно сложна и извлекает свой собственный класс обслуживания при создании экземпляра.
Код должен прояснить это, я надеюсь ...
Действие контроллера:
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
Класс представления модели:
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:
Как при проверке действия контроллера, как заставить модель представления использовать поддельный класс обслуживания?
Должен ли я просто отказаться от первого конструктора и всегда передавать сервис из контроллера или есть другой способ?
Приветствия
Ник