У меня есть класс, который примерно выглядит следующим образом:Как я могу издеваться над этим асинхронным методом?
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);
}
.
.
.
}
Я хочу, чтобы дразнить мой интерфейс IWebService так, что, когда BeginGetStaticReferenceData называется она способна вызвать метод обратного вызова. Я использую Moq, и я не могу понять, как это сделать. Мой блок тест установить код выглядит примерно так:
//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);
.
.
Отлично, это прекрасно работало. Спасибо! – Charlie
Я пробовал адаптировать это для UdpClient, и он работал только в том случае, если я изменил обратный вызов с '=> callback = cb' на' => cb (ar) '. Не уверен, что я взломал монстра или что ... – Benjol
Что такое класс Mock для выше? Это ваш класс или мне нужно добавить ссылку на его использование? –