我正在努力使用 N Substitute伪造 Get only 属性ETag 。
库命名空间:Microsoft.Azure.Documents.Resource.ETag 任何帮助表示赞赏?
我正在努力使用 N Substitute伪造 Get only 属性ETag 。
库命名空间:Microsoft.Azure.Documents.Resource.ETag 任何帮助表示赞赏?
CosmosDB 响应是模拟的噩梦。你不能用模拟库来做到这一点。
但是有一个解决方法,我用它来模拟Cosmonaut
您可以使用此方法通过反射创建 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")
了。
没有其他办法,因为一切都是内部密封的,它们是一个类。