【发布时间】: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,以便 BlobProperties 的 LastModified 属性返回一些非空值?
我正在使用Microsoft.Azure.Storage.Blob, Version=11.2.2.0
【问题讨论】:
-
如果以下答案对您有帮助,您可以接受它作为答案(单击答案旁边的复选标记将其从灰色切换为填充。)。这可能对其他社区成员有益。谢谢
标签: c# unit-testing azure-blob-storage