我试图对私有方法进行简单的单元测试,我让VS2010自动生成方法stubb并添加缺少的信息:这是我的代码
[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(它不是重构友好的)。
答案 0 :(得分:0)
我遇到了同样的问题。为了解决这个问题,我确保Local.testsettings
和TraceAndTestImpact.testsettings
都在“数据和诊断”选项中选择了正确的文件(Debug
,Release
等)。
如果您有代码覆盖率,或者允许选择您将使用的程序集的任何设置。选择正确的集合,编译并再次尝试单元测试。有时您需要重新创建访问者。我也有一个基类,但它似乎适用于任何Public Static
方法。