如何模拟公共只读字段

问题描述 投票:0回答:2

使用 Moq 我如何模拟以下类,以便它在单元测试中返回虚拟值:

public abstract class DataService
{
    public readonly string DataDirectory; //I need to mock the return value

    protected DataService()
    {
        DataDirectory = "c:\temp";
    }
}

谢谢

编辑

在课程中添加更多内容,以便可以理解问题:

public abstract class DataService
{
    public readonly DirectoryInfo DataDirectory;

    protected GitService()
    {
        DataDirectory = new DirectoryInfo("c:\temp");
    }

    public virtual object GetRepositoryByName(string name)
    {
         //Locate the repo, build it and return it
         string path = Path.Combine(DataDirectory.FullName, name);
         return new BuildRepository(path);       
    }
}
mocking moq
2个回答
3
投票

您可以更改您的代码吗?使其成为一个属性,而不是一个可公开访问的字段。除了常量(或有效常量、公共静态只读不可变值)之外,您通常应该将字段设为私有。

您还可以更改您的类以允许将值注入其中,而不是它自己提出它。这取决于您真正想做什么。


0
投票

执行此操作的方法是通过“设置”和“返回”方法。

var mock = Mock<DataService>();
mock.Setup(m => m.DataDirectory).Returns(new DirectoryInfo("c:\temp");
© www.soinside.com 2019 - 2024. All rights reserved.