我正在开发一个新的 C# 3.5 应用程序,该应用程序需要监视 Exchange 邮箱并在收到电子邮件时执行一些操作。我知道Microsoft现在建议使用Exchange Web Services在Exchange服务器上执行操作,所以我决定使用它。
我还发现了Exchange Web服务托管API(使用版本1.2.1),这似乎确实使调用这些Web服务的任务变得更加容易。
我的问题是,是否有人使用托管 API 创建自动化单元/集成测试?
目前我没有 Exchange 服务器,所以我真的想创建某种模拟(我通常使用 Moq),但Microsoft.Exchange.WebServices.Data.ExchangeService
没有实现任何我可以模拟的接口。我的代码全部编码为接口,专为依赖注入而设计,但我想不出一种好方法来抽象出 EWS API 依赖关系。
您可以使用外观设计模式,并在 EWS 托管 API 之上构建一组类。 外观类应实现一组您自己创建的接口。 接口不应模仿 EWS API,而应仅公开应用程序中所需的功能。
应用程序中的代码会很高兴地忘记 EWS。 它只会知道您的外观接口,这使您可以在单元测试时使用 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...
}
}