Как смоделировать внешние зависимости, используя JustMock Lite

Я использую бесплатную версию 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

}

Редактировать: Мое приложение - это веб-служба, которая в основном использует управляемые API EWS для получения данных учетной записи электронной почты с сервера обмена. Итак, чтобы начать общение, я сначала делаю автообнаружение, чтобы получить 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;
    }
}

0 ответов

Другие вопросы по тегам