我有一个要模拟的依赖项。

public abstract class MyDependency
{
    protected Dictionary<string, object> _outputs = new Dictionary<string, object>();
    public Dictionary<string, object> Outputs
    {
        get
        {
            return _outputs;
        }
    }
}

为了进行单元测试,我需要公共(public)属性Outputs返回一个已知值。我知道我们不能 mock 字段或非虚拟成员。因此,我可以创建自己的模拟MyDependency来设置后备字段_outputs:
public class MockMyDependency : MyDependency
{
    public MockMyDependency()
    {
        _outputs = new Dictionary<string, object>
        {
            { "key", "value" }
        };
    }
}

但是,是否可以使用Moq来执行此操作而无需显式创建自己的派生模拟类?

最佳答案

如果您不能将属性更改为虚拟属性或定义接口(interface)(我假设如果您不能执行第一个操作,那么您也将无法执行第二个操作),那么我只会看到两个可能的选择:

  • 使用不支持模拟非虚拟成员(例如TypeMock)的模拟框架
  • 创建一个特定的模拟实现,该实现从MyDependency继承,就像您已经做的那样。
  • 关于c# - 我可以使用Moq设置字段的值吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15910621/

    10-14 18:04