How can I mock this asynchronous method?
        Posted  
        
            by Charlie
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Charlie
        
        
        
        Published on 2010-03-25T11:15:44Z
        Indexed on 
            2010/03/25
            11:33 UTC
        
        
        Read the original article
        Hit count: 588
        
I have a class that roughly looks like this:
public class ViewModel
{
  public ViewModel(IWebService service)
  {
    this.WebService = service;
  }
  private IWebService WebService{get;set;}  
  private IEnumerable<SomeData> MyData{get;set;}
  private void GetReferenceData()
  {
    this.WebService.BeginGetStaticReferenceData(GetReferenceDataOnComplete, null);
  }
  private void GetReferenceDataOnComplete(IAsyncResult result)
  {
    this.MyData = this.WebService.EndGetStaticReferenceData(result);
  }
  .
  .
  .
}
I want to mock my IWebService interface so that when BeginGetStaticReferenceData is called it is able to call the callback method. I'm using Moq and I can't work out how to do this. My unit test set up code looks something like:
//Arrange
var service = new Mock<IWebService>();
service.Setup(x => x.BeginGetStaticReferenceData(/*.......don't know.....*/));
service.Setup(x => x.EndGetStaticReferenceData(It.IsAny<IAsyncResult>())).Returns(new List<SomeData>{new SomeData{Name="blah"}});
var viewModel = new ViewModel(service.Object);
.
.
© Stack Overflow or respective owner