Я бы хотел, чтобы асинхронный метод "UpdateAsync" возвращал пользовательское сообщение об исключении при вызове метода PutAsync.Теперь я делаю макет класса, к которому принадлежат PutAsync, а затем я настраиваю метод и даю параметр.Я также использую Throws для пользовательских сообщений об исключениях.
Проблема в том, что когда я запускаю этот
var result = await this.repository.UpdateAsync(new EndPoint(new Uri(testUrl), HttpMethod.Put), JObject.FromObject(new object()), this.exceptionProcessor);
, PutAsync продолжает работать без исключений возврата.Вот код.
Mock<RestClient> rc = new Mock<RestClient>();
rc.Setup(x => x.PutAsync(new Uri(testUrl), JObject.FromObject(new object()), new NameValueCollection()))
.Throws(new Exception("TestMessage"));
var result = await this.repository.UpdateAsync(new EndPoint(new Uri(testUrl), HttpMethod.Put), JObject.FromObject(new object()), this.exceptionProcessor);
Assert.IsTrue(result.ErrorMessages.GetValue(string.Empty).Equals("TestMessage"));
здесь - основная часть UpdateAsync, когда процесс переходит сюда, он сначала войдет в GetClient (), а затем сразу перейдет к исключению.Этот тест был написан с использованием Shimes, но мы больше не хотим использовать Shimes, поэтому мне нужно использовать другой способ.
public virtual async Task<GenericOperationResult<object>> UpdateAsync(EndPoint endpoint, JContainer obj, IExceptionProcessor exceptionProcessor, NameValueCollection headers){
if (endpoint.ActionMethod == HttpMethod.Put)
{
result = await this.GetClient().PutAsync(endpoint.Url, obj, headers);
}
else if (endpoint.ActionMethod == HttpMethod.Post)
{
result = await this.GetClient().PostAsync(endpoint.Url, obj, headers);
}
else
{
throw new ConfigurationException("Update supports only POST or PUT verbs. Check endpoint configuration.");
}
return new GenericOperationResult<object>(200, result);
}