Как издеваться над публичным полем только для чтения - PullRequest
0 голосов
/ 13 декабря 2011

Используя Moq, как я могу издеваться над следующим классом, чтобы он возвращал фиктивные значения в моих модульных тестах:

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

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

Спасибо

EDIT

Добавление большего количества мяса в класс, чтобы можно было понять проблему:

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);       
    }
}

1 Ответ

3 голосов
/ 13 декабря 2011

Можете ли вы изменить свой код вместо этого?Сделайте это свойство вместо публично доступного поля.Кроме констант (или эффективных констант, общедоступных статических неизменяемых значений), вы, как правило, должны делать поля закрытыми в любом случае.

Вы также можете изменить свой класс, чтобы в него можно было вводить значение, а не приходитьсам с этим.Это зависит от того, что вы действительно пытаетесь сделать.

...