【问题标题】:C# Set BlobProperties on CloudBlob Object For TestingC# 在 CloudBlob 对象上设置 BlobProperties 以进行测试
【发布时间】:2022-12-18 13:28:25
【问题描述】:

我有一个 Microsoft.Azure.Storage.Blob.CloudBlob blob; 对象,我正在调用 blob.Properties getter 来获取 blob 的 BlobProperties 对象。我想要 BlobProperties 对象,这样我就可以读取 BlobProperties::LastModified 属性并将其存储到我自己的自定义模型中。

我无法对此进行测试,因为我无法构造具有非空 LastModified 属性的 BlobProperties 对象。我无法构造预期的对象,因为没有可用的构造函数或设置器来设置 LastModified 属性。我只有一个默认和复制构造函数可用:

public sealed class BlobProperties{
    public BlobProperties();

    public BlobProperties(BlobProperties other);

    public DateTimeOffset? LastModified { get; }
}

var props = new Moq.Mock<BlobProperties>() // Error, cannot mock a sealed class
props.Setup(p => p.LastModified).Returns(DateTime.Now); // Unavailable since the class cannot be mocked

// Use the mocked BlobProperties as a return value for a mocked CloudBlockBlob 
var blob = new Moq.Mock<CloudBlockBlob>()
blob.Setup(b => b.Properties).Returns(props.Object);

...

// My custom model adapter
LastModified lastModified = blob.Properties.LastModified;

我是 C# 的新手,我认为这可以通过使用 Moq 进行模拟来解决,但是该类被标记为 sealed,因此无法对其进行模拟。使用垫片不是一种选择。

所以我的问题是...

我如何实例化或覆盖 getter,以便 BlobPropertiesLastModified 属性返回一些非空值?

我正在使用Microsoft.Azure.Storage.Blob, Version=11.2.2.0

BlobProperties

CloudBlob

【问题讨论】:

  • 如果以下答案对您有帮助,您可以接受它作为答案(单击答案旁边的复选标记将其从灰色切换为填充。)。这可能对其他社区成员有益。谢谢

标签: c# unit-testing azure-blob-storage


【解决方案1】:

BlobsModelFactory 似乎就是答案。这种类型有一堆带有一组可选参数的静态方法来创建 BlobProperties 实例。

var blobProperties = BlobsModelFactory.BlobProperties(contentType: "application/pdf");
var response = Substitute.For<Azure.Response<BlobProperties>>();
response.Value.Returns(blobProperties);

【讨论】:

    【解决方案2】:
            BlobProperties mockblobProperties = new BlobProperties();
            mockblobProperties.GetType().GetProperty(nameof(mockblobProperties.LastModified)).SetValue(mockblobProperties, DateTimeOffset.UtcNow);
            this.mockBlob.GetProperties().Returns(mockblobProperties);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多