模拟 Azure BlobItem - C# 单元测试

kde*_*eez 12 c# unit-testing moq azure-blob-storage

我有一些单元测试,我想在其中模拟 AzureBlobItem类 (Azure.Storage.Blobs.Models)。

这是我正在使用的测试类。我希望Valuesgetter 返回一个带有模拟 BlobItem 的列表。那是有效的。

public class TestPage : Page<BlobItem>
{
    public override IReadOnlyList<BlobItem> Values
    {
        get
        {
            return new List<BlobItem>() { new Mock<BlobItem>().Object };
        }
    }

    public override string ContinuationToken => throw new NotImplementedException();

    public override Response GetRawResponse()
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,Name我的模拟 BlobItem 上的属性始终为 null。

我可以尝试设置它,以便Name返回一个模拟值,如下所示:

var mock = new Mock<BlobItem>();
mock.SetupGet(x => x.Name).Returns("mock");
Run Code Online (Sandbox Code Playgroud)

但后来我得到一个错误:

Non-overridable members may not be used in setup/verification expressions.
Run Code Online (Sandbox Code Playgroud)

我明白为什么会发生这个错误。但我不知道解决方案是什么。

我希望模拟的 BlobItem 返回非空Name值。我怎样才能实现这个目标?

kde*_*eez 27

显然有一个名为 的工厂类BlobsModelFactory

您可以通过调用以下命令来模拟具有任何您想要的名称的 BlobItem:

var blob = BlobsModelFactory.BlobItem("mocked.mocked.mocked.mocked")
Run Code Online (Sandbox Code Playgroud)