6

我正在开发一个新的 C# 3.5 应用程序,该应用程序需要监视 Exchange 邮箱并在收到电子邮件时执行一些操作。我知道微软现在建议使用 Exchange Web 服务在 Exchange 服务器上执行操作,所以我决定使用它。

我还发现了Exchange Web Services Managed API(使用 1.2.1 版),这似乎使调用这些 Web 服务的任务变得更加容易。

我的问题是,有没有人有使用托管 API 创建自动化单元/集成测试的经验?

目前我没有 Exchange 服务器,所以我真的很想创建某种模拟(我通常使用 Moq),但Microsoft.Exchange.WebServices.Data.ExchangeService没有实现任何我可以模拟的接口。我的代码全部编码为接口并为依赖注入而设计,但我想不出一种抽象出 EWS API 依赖的好方法。

4

1 回答 1

5

您可以使用外观设计模式并在 EWS 托管 API 之上构建一组类。Facade 类应该实现一组您自己创建的接口。这些接口不应模仿 EWS API,而应仅公开您在应用程序中需要的功能。

您的应用程序中的代码会很高兴地忘记 EWS。它只会知道您的 Facade 接口,这使您可以在单元测试时使用 Moq 存根或模拟接口。

例如,如果您需要检索邮箱中的所有项目,您可以使用一个名为 GetItems 的方法创建一个 IMailBox 接口:

public interface IMailBox
{
    IEnumerable<MailItem> GetItems(string smtpAddress, WellknownFolderName folder);
}

然后,对于您的应用程序,您将创建一个实现此接口的类。您可以使用您最喜欢的 DI 框架在代码中注入该类。

public class MailBox : IMailBox
{
    public IEnumerable<MailItem> GetItems(string smtpAddress, WellknownFolderName folder)
    {
        var service = new ExchangeService();
        // Some code here...
    }
}
于 2012-09-26T07:19:35.483 回答