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.testsettings和诊断”选项中TraceAndTestImpact.testsettings选择了正确的文件(Debug、、Release等)。

这是如果您有代码覆盖率,或者任何允许选择您将使用的程序集的设置。选择正确的集合,编译并再次尝试单元测试。有时您需要重新创建访问器。我也有一个基类,但它似乎适用于任何Public Static方法。

于 2013-10-31T21:12:33.070 回答