Ответ CosmosDB - это кошмар для насмешек.Вы не можете сделать это с библиотекой насмешек.
Однако есть обходной путь, который я использовал для насмешек в Космонавт
Вы можете использовать этот метод для создания DocumentServiceResponseс отражением.Это означает, что вы можете использовать метод .SetPropertyValue
для установки значения etag.
public static ResourceResponse<T> CreateResourceResponse<T>(T resource, HttpStatusCode statusCode) where T : Resource, new()
{
resource.SetResourceTimestamp(DateTime.UtcNow);
var resourceResponse = new ResourceResponse<T>(resource);
var documentServiceResponseType = Type.GetType("Microsoft.Azure.Documents.DocumentServiceResponse, Microsoft.Azure.DocumentDB.Core, Version=1.9.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
var flags = BindingFlags.NonPublic | BindingFlags.Instance;
var headers = new NameValueCollection {{"x-ms-request-charge", "0"}};
var arguments = new object[] { Stream.Null, headers, statusCode, null };
var documentServiceResponse = Activator.CreateInstance(documentServiceResponseType, flags, null, arguments, null);
var responseField = typeof(ResourceResponse<T>).GetField("response", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
responseField.SetValue(resourceResponse, documentServiceResponse);
return resourceResponse;
}
Просто выполните resource.SetPropertyValue("_etag", "Yourguid")
, и оно будет работать.
Вы можете увидеть, как оно использовалось вместе с Moq здесь
Другого пути нет, потому что все внутренне запечатано и они класс.