Esta es la situación. Tuve una llamada asíncrona, así que tuve que hacer un nivel medio para esto para poder probarlo.Defina la implementación del método en el objeto simulado usando Moq
request.BeginGetResponse(new AsyncCallback(LoginCallback), requestState);
Entonces, para poder probar esto sin una solicitud real, creé una interfaz que puedo simular.
public interface IRequestSender
{
void Send(HttpWebRequest request, AsyncCallback internalCallback, object requestState);
}
Luego, en la ejecución que puede utilizar la llamada de esa manera uno por encima y me puede proporcionar una cierta clase de simulacro para llamar a mi método de devolución de llamada, independientemente solicitud es válida o no. Mi clase simulada se ve así.
public class RequestSenderMock : IRequestSender
{
public void Send(HttpWebRequest request, AsyncCallback internalCallback, object requestState)
{
var result = new Mock<IAsyncResult>();
result.Setup(x => x.AsyncState).Returns(requestState);
internalCallback(result.Object);
}
}
ahora puedo crear fácilmente objeto de burla en mi prueba de la unidad y utilizarla. Pero cuando creo
var sender = new Mock<RequestSenderMock>();
No puedo verificar el conteo de llamadas para este objeto.
sender.Verify(x => x.Send(It.IsAny<HttpWebRequest>(), It.IsAny<AsyncCallback>(), It.IsAny<object>()), Times.Once());
Dice que mi método debe ser virtual. ¿Hay alguna manera de hacerlo sin hacer que mi método sea virtual? Sería mejor si de alguna manera pudiera especificar la impelementación del método al usar la interfaz.
var sender = new Mock<IRequestSender>();
Y eso de alguna manera con el método de instalación o algún otro para hacer la implementación en este objeto simulacro. Entonces simplemente eliminaré mi clase simulada. ¿Esto es posible? ¿Que sugieres?
Gracias, eso es exactamente lo que necesitaba. :) – Vajda