4

最終的に web.config ファイルに組み込まれる値を単体テストしようとしています。私のテスト プロジェクトでは、設定を保持するための web.config セクションを含む app.config ファイルを作成しました。通常は System.Configuration.ConfigurationSettings.AppSettings を呼び出しますが、この場合は機能しません。私はこの質問を見ました。これは非常に似ていますが、構成ファイルから NameValueCollection を取得する方法には対応していません。構成ファイルの例を次に示します。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.web>
      <membership defaultProvider="CustomMembershipProvider">
        <providers>
          <clear/>
          <add
            name="CustomMembershipProvider"
            applicationName="SettlementInfo"
            enablePasswordRetrieval="false"
            enablePasswordReset="false"
            requiresQuestionAndAnswer="true"
            writeExceptionsToEventLog="true" />
        </providers>
      </membership>
    </system.web>    

</configuration>

誰もこれを以前に扱ったことがありますか?

4

5 に答える 5

3

ここで混乱していると思います。ASP.NET がカスタム メンバーシップ プロバイダーを適切に使用していることをテストしようとしているようです。正しい?

もしそうなら、MS フレームワークを使用してこれを単体テストできないことは 99.999% 確信しています。Web サーバーにデプロイ (または VS で Cassini を実行) し、ログイン ページにユーザー名/パスワードを入力して、統合テストを行う必要があります。

さて、あなたのリクエストを誤解した可能性があります。もしそうなら、私に知らせてください。それに応じて回答を編集します。

編集:

今のところ、値が存在しない場合にデフォルトが適用されていることを確認するために、構成ファイルから出力される NameValue ペアをテストしようとしています。つまり、applicationName を取得して、それが "SettlementInfo" と等しいことを確認したいなどです。その後、統合テストを使用して、ASP.NET が既定のフレームワークの代わりにカスタム フレームワークを使用していることを確認します。それは理にかなっていますか?

返信するにはコメント以上が必要なので、編集中です。私が正しく読んだ場合、プログラムを単体テストして、構成が正しく処理されることを確認したいと考えていますか? たとえば、コードが正しい AppSettings キーを取得し、その中の null 値を処理することを確認したいという意味ですか?

その場合は、幸運です。app.config や web.config はまったく必要ありません。テスト セットアップの一部として必要な値を設定できます。

例えば:

[TestMethod]
public void Test_Configuration_Used_Correctly()
{
    ConfigurationManager.AppSettings["MyConfigName"] = "MyConfigValue";
    MyClass testObject = new MyClass();
    testObject.ConfigurationHandler();
    Assert.AreEqual(testObject.ConfigurationItemOrDefault, "MyConfigValue");
}

[TestMethod]
public void Test_Configuration_Defaults_Used_Correctly()
{
    // you don't need to set AppSettings for a non-existent value...
    // ConfigurationManager.AppSettings["MyConfigName"] = "MyConfigValue";

    MyClass testObject = new MyClass();
    testObject.ConfigurationHandler();
    Assert.AreEqual(testObject.ConfigurationItemOrDefault, "MyConfigDefaultValue");
}
于 2009-03-04T21:25:08.790 に答える
2

アプリケーションが実際に起動されている間のみ、webconfig ファイルにアクセスできると思います。解決策はかなり簡単です->構成を「偽造」します。NameValueCollection を使用し、代わりにそれを使用します。

private static NameValueCollection CreateConfig()
{
NameValueCollection config = new NameValueCollection();
    config.Add("applicationName", "TestApp");
    config.Add("enablePasswordReset", "false");
    config.Add("enablePasswordRetrieval", "true");
    config.Add("maxInvalidPasswordAttempts", "5");
    config.Add("minRequiredNonalphanumericCharacters", "2");
    config.Add("minRequiredPasswordLength", "6");
    config.Add("requiresQuestionAndAnswer", "true");
    config.Add("requiresUniqueEmail", "true");
    config.Add("passwordAttemptWindow", "10");

    return config;
}

これで、コレクションからデータを解析するクラスにそのコレクションを簡単に渡すことができます。

于 2010-06-30T14:58:27.427 に答える
1

ConfigurationManager.GetSection()メソッドを使用して、必要なものをすべて引き出すことができるはずです。

于 2009-03-04T21:51:03.753 に答える
1

実際、NUnit を使用している場合は、テスト プロジェクトの App.config に貼り付けることができます。次に、ビルド後のイベントに次の行を追加します。

copy /Y “$(ProjectDir)App.config” “$(TargetDir)$(TargetFileName).config”</p>

テストで新しいプロバイダーを作成すると、NUnit は app.config の値を initialize メソッドでプロバイダーに渡します。

于 2012-01-23T17:41:23.267 に答える
0

なぜそれを web.config ファイルに貼り付けないのですか?

于 2009-03-04T21:05:33.487 に答える