使用我自己的Web服务事件进行抽象

时间:2012-04-03 13:32:59

标签: c# web-services events testing

将Web服务调用提取为抽象时,可以轻松地测试它们,而不必依赖Web服务在线,如何抽象服务自动调用的事件处理程序?我遇到的问题是,因为我正在使用的API(EWS)已经内联了所有类,所以我无法创建它们。这在单元测试时会变成一个问题,因为我不能说,例如,当事件被触发时它应该xyz

如何用自己的方法提取这些事件处理程序,以便我可以轻松地模拟它们?

1 个答案:

答案 0 :(得分: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,并在生产中使用ISomeService实例SomeServiceWrapper

希望有所帮助。