2

プライベート メソッドの簡単な単体テストを作成しようとしていますが、VS2010 にメソッド スタブを自動生成させ、不足している情報を追加させます。これは私が持っているコードです。

[TestMethod()]
        [DeploymentItem("MyPackage.Language.dll")]
        public void getValidCultureWithValidInputCulture()
        {
            CultureInfo culture = new CultureInfo("sv-SE", false);
            PrivateObject param0 = new PrivateObject(culture, new PrivateType(typeof(CultureInfo)));
            GlobalResourceProvider_Accessor target = new GlobalResourceProvider_Accessor(param0);
            CultureInfo expected = new CultureInfo("sv-SE", false); 
            CultureInfo actual = target.getValidCulture(culture);
            Assert.AreEqual(expected, actual);
            Assert.Inconclusive("Verify the correctness of this test method.");
        }

これを実行すると、例外が発生します。

System.ArgumentException: 
      The member specified (getValidCulture) could not be found. You might need to regenerate your private accessor,
      or the member may be private and defined on a base class. If the latter is true, you need to pass the type
      that defines the member into PrivateObject's constructor.

ここで私が間違っていることを誰か知っていますか?私の目的は、プライベート メソッドのテストに PrivateType と PrivateObject を使用する方法を学ぶことです。

編集:

PrivateObject.Invoke を使用するつもりはありません (リファクタリングに適していません)。

4

1 に答える 1

0

私は同じ問題に遭遇しました。これを修正するために、「データと診断」オプションでLocal.testsettingsTraceAndTestImpact.testsettingsの両方に正しいファイル ( 、 など) が選択されてDebugいることを確認しました。Release

これは、コード カバレッジがある場合、または使用するアセンブリを選択できる設定のいずれかがある場合です。正しいセットを選択し、コンパイルして、単体テストを再試行してください。アクセサーを再作成する必要がある場合があります。私も基本クラスを持っていますが、どのPublic Staticメソッドでも問題なく動作しているようです。

于 2013-10-31T21:12:33.070 に答える