3

次の指示に従います:http ://www.telerik.com/help/justmock/advanced-usage-static-mocking.html

ConfigurationManager.AppSettingsのモックに失敗しました。これが私が使用しているコードです...

[TestMethod]
public void my_test()
{
    // Arrange
    var appSettings = new NameValueCollection {
        { "test1", "one" }
    };

    Mock.Arrange(() => ConfigurationManager.AppSettings)
        .Returns(appSettings)
        .MustBeCalled();

    // Act
    var test1 = ConfigurationManager.AppSettings["test1"];

    // Assert
    Assert.AreEqual("one", test1);
}

これは私が受け取るエラーです。

Assert.AreEqualが失敗しました。期待される:。実際:<(null)>。

このオブジェクトをモックすることは可能ですか?

[編集]私もトライアルを使用しています。

4

2 に答える 2

3

私はあなたのテストを試しましたが、期待どおりに機能しました:

// Arrange 
var appSettings = new NameValueCollection { { "test1", "one" } };

Mock.Arrange(() => ConfigurationManager.AppSettings)
    .Returns(appSettings)
    .MustBeCalled();

// Act 
var test1 = ConfigurationManager.AppSettings["test1"];

// Assert 
Assert.AreEqual("one", test1);

ここで、Configuration.AppSettingsがプロジェクトの静的コンストラクターでまだ呼び出されていないことを確認してください。

ここで、.netプロファイラーはOnJITCompilationStarted中にインターセプトし、これは特定のメンバーに対して1回だけ起動することに注意してください。

さらに、プロファイラーが正しく構成され、VS用のJMプラグインがインストールされていることを確認してください。プロファイラーが Mock.IsProfilerEnabledによって有効になっているかどうかを確認できます。

最後に、厳密なモックを実行している場合や、特定の型の静的コンストラクターを偽造したい場合を除いて、通常はMock.SetupStatic(#TARGET_TYPE#)を使用する必要はありません。Mock.Arrangeを実行する場合、インターセプターがまだ設定されていない場合は自動的に設定されます。

【注:最新版を使用しました】

于 2011-12-13T08:29:28.117 に答える
0

ソース:http ://www.telerik.com/community/forums/justmock/general-discussions/problems-mocking-the-configurationmanager-appsettings.aspx

公式の回答は、これはMSTestのみの問題のようです。

于 2011-12-14T19:46:56.370 に答える