2012-04-03 2 views
0

При извлечении вызовов веб-службы в абстракцию, чтобы их можно было легко протестировать, не полагаясь на веб-службу, находящуюся в сети, как я могу абстрагировать обработчики событий, вызываемые автоматически службой? Проблема, с которой я сталкиваюсь, заключается в том, что, поскольку API, который я использую (EWS), имеет каждый класс, поэтому я не могу их создать. Это становится проблемой при модульном тестировании, потому что я не могу сказать, например, когда событие срабатывает, что он должен делать x, y и z.Тестирование событий веб-сервиса с моим собственным

Как я могу извлечь эти обработчики событий с помощью своих собственных, чтобы я мог легко их издеваться?

ответ

1

Вам нужно будет обернуть класс в свой класс, поддерживающий интерфейс. Например, если ваше использование услуг выглядит следующим образом:

var service = new SomeService(); 
service.SomeEvent =+ (o, e) => DoSomething(e); 
service.DoStuff(); 

Вы создадите интерфейс:

public interface ISomeService 
{ 
    event EventHandler SomeEvent; 
    void DoStuff(); 
} 

И ваш реализующий класс:

public class SomeServiceWrapper : ISomeService 
{ 
    private readonly SomeService _containedService; 

    public event EventHandler SomeEvent; 

    public SomeServiceWrapper() 
    { 
     _containedService = new SomeService(); 
     _containedService.SomeEvent += (o, e) => RaiseSomeEvent(e); 
    } 

    public void DoStuff() 
    { 
     _containedService.DoStuff(); 
    } 

    private void RaiseSomeEvent(EventArgs e) 
    { 
     EventHandler evt = SomeEvent; 
     if (evt != null) 
     { 
      evt(this, e); 
     } 
    } 
} 

Затем вы можете создать фиктивный ISomeService через насмешку или ваш собственный фиктивный класс, и вы используете экземпляр ISomeServiceSomeServiceWrapper в производстве.

Надеюсь, что это поможет.

Смежные вопросы