Как смоделировать внешние зависимости, используя 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;
}
}