[Unidad de prueba del novato] [C#]método que imita la acción <T> parámetro
en cuenta la situación siguiente:
estoy usando Silverlight y llamar a un servicio WCF. Silverlight solo puede llamar a los servicios de WCF de forma asincrónica. Construyo un contenedor alrededor del servicio WCF para que pueda trabajar con los parámetros de Acción. (hace que el código del cliente sea mucho más limpio).
Así que tengo un servicio asíncrono que recupera salas de reuniones.
public interface IMeetingRoomService
{
void GetRooms(Action<List<MeetingRoom>> result);
}
GetRooms convirtiendo en List<MeetingRoom> GetRooms()
no es una opción.
Quiero utilizar este servicio en un ViewModel para establecer una propiedad pública llamada Salas.
public class SomeViewModel
{
private readonly IMeetingRoomService _meetingRoomService;
public List<MeetingRoom> Rooms { get; set; }
public SomeViewModel(IMeetingRoomService meetingRoomService)
{
this._meetingRoomService = meetingRoomService;
}
public void GetRooms()
{
// Code that calls the service and sets this.Rooms
_meetingRoomService.GetRooms(result => Rooms = result);
}
}
Quiero probar por unidad la implementación de SomeViewModel.GetRooms(). (Para esta pregunta, escribí rápidamente la implementación, pero en realidad estoy tratando de usar TDD.)
¿Cómo termino esta prueba? Estoy usando NUnit y Moq.
[Test]
public void GetRooms_ShouldSetRooms()
{
var theRooms = new List<MeetingRoom>
{
new MeetingRoom(1, "some room"),
new MeetingRoom(2, "some other room"),
};
var meetingRoomService = new Mock<IMeetingRoomService>();
//How do I setup meetingRoomService so that it gives theRooms in the Action??
var viewModel = new SomeViewModel(meetingRoomService.Object);
viewModel.GetRooms();
Assert.AreEqual(theRooms, viewModel .Rooms);
}
EDIT:
Solución
respuesta de Lee Stephane primero.
Este es el Código de ensayo terminé escribiendo gracias a la respuesta de Stéphane:
[Test]
public void GetRooms_ShouldSetRooms()
{
var meetingRoomService = new Mock<IMeetingRoomService>();
var shell = new ShellViewModel(meetingRoomService.Object);
var theRooms = new List<MeetingRoom>
{
new MeetingRoom(1, "some room"),
new MeetingRoom(2, "some other room"),
};
meetingRoomService
.Setup(service => service.GetRooms(It.IsAny<Action<List<MeetingRoom>>>()))
.Callback((Action<List<MeetingRoom>> action) => action(theRooms));
shell.GetRooms();
Assert.AreEqual(theRooms, shell.Rooms);
}
que volvería una tarea '' –
CodesInChaos
ehhh ..... qué? –