2010-12-08 10 views
3

私のアプリケーションには、次のコードを持っています部品番号のConfigurationSection

私のGlobal.asax.csファイルに今
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; } 
    } 
} 

私が定義され、以下の静的変数を持っている:

のConfigurationManagerは自分のアプリケーションに注入され
public static CustomSection Settings = ServiceLocator.Current.GetInstance<IConfigurationManager>().Settings; 

。ここまでは順調ですね。今私が言いたいのは、彼らがTrueを返す私の単体テスト内のGlobal.Settings.Transactions.TestStatusにアクセスしようとしているかどうかです。これは私が混乱し、私の最初のattempsがちょうど一緒にスローされたところです。

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にアクセスしようとすると、それがnullでエラーがスローされます。これまでのところ私は、(編集)を持っています。私はちょうど嘲笑に潜入し、本当に助けに感謝します。ありがとう

答えて

4

あなたは新しいオブジェクトを返すので、模倣されたオブジェクトではありません。プロキシされていないオブジェクトを '設定'することはできません。 new CustomSection

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

は、財産上の入手セットアップにあなたのために嘲笑対象にする必要があります。だから、あなたはCustomSectionTransactionElementをモックする必要があります。

関連する問題