6

Exchange メールボックスを監視し、電子メールの受信時にいくつかの操作を実行する必要がある新しい C# 3.5 アプリを開発しています。Microsoft は現在、Exchange Web サービスを使用して Exchange サーバーで操作を実行することを推奨していることを知っているので、それを使用することにしました。

また、Exchange Web サービス マネージ API (バージョン 1.2.1 を使用) も見つけました。これにより、これらの Web サービスを呼び出す作業がはるかに簡単になるようです。

私の質問は、マネージ API を使用して自動化されたユニット/統合テストを作成した経験がある人はいますか?

現時点では Exchange サーバーを持っていないので、何らかのモック (通常は Moq を使用) を作成したいのですが、Microsoft.Exchange.WebServices.Data.ExchangeServiceモックできるインターフェイスを実装していません。私のコードはすべてインターフェース用にコーディングされており、依存性注入用に設計されていますが、EWS API 依存性を抽象化する良い方法が思いつきません。

4

1 に答える 1

5

Facadeデザイン パターンを使用して、EWS マネージ API の上に一連のクラスを構築できます。Facade クラスは、自分で作成した一連のインターフェイスを実装する必要があります。インターフェイスは EWS API を模倣するべきではなく、アプリケーションで必要な機能のみを公開する必要があります。

アプリケーション内のコードは、EWS を気にする必要はありません。単体テスト時にMoqを使用してインターフェースをスタブまたはモックできるようにするFacadeインターフェースのみを認識します。

たとえば、メールボックス内のすべてのアイテムを取得する必要がある場合は、GetItems という 1 つのメソッドで 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 に答える