Moq ConfigurationSection - PullRequest
       5

Moq ConfigurationSection

3 голосов
/ 08 декабря 2010

мое приложение имеет следующий код:

public interface IConfigurationManager {
    CustomSection Settings { get; }
}

public class ConfigurationManager : IConfigurationManager {
    public CustomSection Settings { get { return (CustomSection)WebConfigurationManager.GetSection("customSettings"); } }
}

public class CustomSection : ConfigurationSection {
    [ConfigurationProperty("transactions", IsRequired = true)]
    public TransactionsElement Transactions {
        get { return (TransactionsElement)base["transactions"]; }
    }
}

public class TransactionsElement : ConfigurationElement {
    [ConfigurationProperty("testStatus", DefaultValue = true)]
    public bool TestStatus {
        get { return (bool)base["testStatus"]; }
        set { base["testStatus"] = value; }
    }
}

Теперь в моем файле Global.asax.cs я определил следующую статическую переменную:

public static CustomSection Settings = ServiceLocator.Current.GetInstance<IConfigurationManager>().Settings;

Где ConfigurationManager внедряется в мое приложение. Все идет нормально. Теперь я хочу сказать, что если они попытаются получить доступ к Global.Settings.Transactions.TestStatus внутри моих модульных тестов, он возвращает true. Здесь я запутался, и мои первые попытки были просто сброшены. Пока что у меня есть (отредактировано):

var cm = new Mock<IConfigurationManager>();
var cs = new Mock<CustomSection>();
var te = new Mock<TransactionsElement>();

cm.SetupGet(m => m.Settings).Returns(cs.Object);
cs.SetupGet(s => s.Transactions).Returns(te.Object);
te.SetupGet(e => e.TestStatus).Returns(true);

Но когда я пытаюсь получить доступ к Global.Settings.Transactions.TestStatus, он выдает нулевую ошибку. Я просто погружаюсь в насмешки и буду очень признателен за помощь. Спасибо

1 Ответ

4 голосов
/ 08 декабря 2010

Потому что вы возвращаете новый объект, а не поддельный объект. Вы не можете «Настроить» непроксимированный объект.

configurationManager.Setup(c => c.Settings).Returns(new CustomSection());

new CustomSection, должен быть фиктивным объектом, чтобы вы могли установить Get для свойства. Так что вам надо издеваться CustomSection и TransactionElement.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...