0

私は JustMock の無料版を使用して、封印されたクラスであるGetUserSettingsResponseのようないくつかの外部依存関係をモックしています。問題は、無料版ではシールされたクラスをモックできないことです。諸事情により完全版は使えません。以下は私のコードサンプルです:

public GetUserSettingsResponse GetUserSettingsResponse(string emailAddress)
{
    var response = service.GetUserSettings(
        emailAddress,
        UserSettingName.ExternalEwsUrl,
        UserSettingName.InternalEwsUrl,
        UserSettingName.EwsSupportedSchemas);
        return response;
}

これは、私が以下のようにモックしようとしている方法です:

[TestMethod]
public void GetExchangeService()
{
    //Arrange            
    string url = "";
    GetUserSettingsResponse response;
    ObjectOfMyClass.Arrange(x => x.GetUserSettingsResponse(Arg.IsAny<string>())).Returns(new GetUserSettingsResponse()); //this is where it throws exception saying that only non-sealed classes can be mocked with lite version of just mock

}

編集:私のアプリケーションは、基本的に EWS マネージ API を使用して Exchange サーバーから電子メール アカウントの詳細を取得する Web サービスです。したがって、通信を開始するために、まず AutoDiscovery を実行して、ユーザーの電子メール アドレスから URL を取得します。したがって、テスト対象は GetUserSettingsResponse メソッドを内部的に呼び出す以下のメソッドです。

public class MyClass
{
    public ExchangeService GetExchangeService(
                string userName,
                string password,
                int version,
                string emailAddress,
                string userId)
    {
        AutoDiscoverService service = new AutodiscoverService();
        service.UseDefaultCredentials = false;
        service.Credentials = new NetworkCredential(userName, password);
        service.EnableScpLookup = true;

        service.ReturnClientRequestId = true;

        service.PreAuthenticate = false;

        service.RedirectionUrlValidationCallback = RedirectionUrlValidationCallback;

        var url = string.Empty;
        var response = GetUserSettingsResponse(emailAddress);
        if (response.TryGetSettingValue(UserSettingName.ExternalEwsUrl, out settingValue)
            || response.TryGetSettingValue(UserSettingName.InternalEwsUrl, out settingValue))
        {
            ewsurl = settingValue;
        }
        var exchangeService = new ExchangeService((ExchangeVersion)version)
                                      {
                                          Credentials = new WebCredentials(userName, password),
                                          KeepAlive = true,
                                          Url = new Uri(ewsurl)
                                      };
        return exchangeService;
    }
}
4

0 に答える 0