c# - 使用 SetupGet 回调 Moq Index 属性

标签 c# indexing properties mocking moq

我正在尝试为扩展方法编写一个测试,该方法为发送到 IConfiguration 的索引属性的键添加前缀:

延期:

public static class IConfigurationExt
{
    public static string GetDomainValue(this IConfiguration configuration, string key)
    {
        return configuration["domain." + key];
    }
}

测试:
[Test]
public void GetInexKeyAsCallback()
{
    string keySet = null;

    Mock<IConfiguration> configurationMock = new Mock<IConfiguration>(MockBehavior.Strict);

    configurationMock.SetupGet(p => p[It.IsAny<string>()])
                        .Callback(() => keySet = "assign key here") // <<< the part here needs the parameter
                        .Returns("mock");

    IConfiguration configuration = configurationMock.Object;

    var result = configuration.GetDomainValue("testKey");

    Assert.AreEqual(expected: "domain.testKey", actual: keySet);
}

我试图看到,当执行 getter 并发送 key 时,它将带有 IConfiguration 的 index 属性的前缀。
我的问题是我无法使回调部分使用参数,例如:.Callback<string>((key) => keySet = key) , 例如。

有没有办法获取发送到索引属性的 key ?
它适用于 SetupSet , 但不是 SetupGet
谢谢!

最佳答案

SetupGet没有 Callback允许访问传递的参数。

使用Setup相反,然后是 Callback可以通过在委托(delegate)中包含参数来访问传递的参数

public void GetInexKeyAsCallback() {
    //Arrange
    string actual = null;
    string expected = "domain.testKey";

    Mock<IConfiguration> configurationMock = new Mock<IConfiguration>(MockBehavior.Strict);

    configurationMock
        .Setup(_ => _[It.IsAny<string>()]) // <-- Use Setup
        .Callback((string arg) => actual = arg) // <<< the part here gets the parameter
        .Returns("mock");

    IConfiguration configuration = configurationMock.Object;

    //Act
    var result = configuration.GetDomainValue("testKey");

    //Assert
    Assert.AreEqual(expected, actual);
}

关于c# - 使用 SetupGet 回调 Moq Index 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58338672/

相关文章:

c# - XmlNode.SelectSingleNode 返回当前元素之外的元素?

c# - 测量一个函数所用的时间,不明白为什么时差是负的

c# - 使用多个 catch block 处理 SOAP 异常情况

java - 创建一个空数组列表,然后将索引设置为一个对象

ios - 通知 iVar 值变化

c# - 本地主机服务器的 SQL 连接字符串

indexing - awk - 打印包含初始分析中找到的最大值的所有行(行之间包含 U+2500 Unicode 字符)

mysql标签表索引

spring - 如何在 YML 中表示带有值和子属性的 Spring 属性?

c# - 如何设置显式实现的接口(interface)的属性?