В моем модульном тесте, как я могу проверить, что событие сгенерировано объектом.
У меня есть View (UI) -> ViewModel -> DataProvider -> ServiceProxy. ServiceProxy выполняет асинхронный вызов операции serivce. Когда асинхронная операция завершена, вызывается метод в DataProvider (метод обратного вызова передается в качестве параметра метода). Затем вызывается метод обратного вызова и событие, которое ViewModel слушает.
Для теста ViewModel я смоделирую DataProvider и проверяю, существует ли обработчик для события, вызванного DataProvider. При тестировании DataProvider я издеваюсь над ServiceProxy, но как проверить, что вызывается метод обратного вызова и вызывается событие.
Я использую RhinoMock 3.5 и синтаксис AAA
Спасибо
- DataProvider -
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);
}
}