В моем модульном тесте, как я могу проверить, что событие вызывается издевательством над объектом.
У меня есть View(UI) --> ViewModel --> DataProvider --> ServiceProxy. ServiceProxy выполняет асинхронный вызов операции обслуживания. Когда асинхронная операция завершена, вызывается метод DataProvider (метод обратного вызова передается как параметр метода). Затем метод обратного вызова вызывает и событие, которое прослушивает ViewModel.
Для теста ViewModel я издеваюсь над DataProvider и проверяю, существует ли обработчик для события, вызванного DataProvider. При тестировании DataProvider я издеваюсь над ServiceProxy, но как я могу проверить, что вызывается метод обратного вызова и возникает событие.
Я использую синтаксис RhinoMock 3.5 и AAA.
Спасибо
-- Провайдер данных --
public partial class DataProvider
{
public event EventHandler<EntityEventArgs<ProductDefinition>> GetProductDefinitionCompleted;
public void GetProductDefinition()
{
var service = IoC.Resolve<IServiceProxy>();
service.GetProductDefinitionAsync(GetProductDefinitionAsyncCallback);
}
private void GetProductDefinitionAsyncCallback(ProductDefinition productDefinition, ServiceError error)
{
OnGetProductDefinitionCompleted(this, new EntityEventArgs<ProductDefinition>(productDefinition, error));
}
protected void OnGetProductDefinitionCompleted(object sender, EntityEventArgs<ProductDefinition> e)
{
if (GetProductDefinitionCompleted != null)
GetProductDefinitionCompleted(sender, e);
}
}
-- ServiceProxy --
public class ServiceProxy : ClientBase<IService>, IServiceProxy
{
public void GetProductDefinitionAsync(Action<ProductDefinition, ServiceError> callback)
{
Channel.BeginGetProductDefinition(EndGetProductDefinition, callback);
}
private void EndGetProductDefinition(IAsyncResult result)
{
Action<ProductDefinition, ServiceError> callback =
result.AsyncState as Action<ProductDefinition, ServiceError>;
ServiceError error;
ProductDefinition results = Channel.EndGetProductDefinition(out error, result);
if (callback != null)
callback(results, error);
}
}