gpt4 book ai didi

c# - 如何使用 PrivateObject 在 C# 中对私有(private)方法进行单元测试

转载 作者:太空宇宙 更新时间:2023-11-03 16:23:35 25 4
gpt4 key购买 nike

我试图对私有(private)方法进行简单的单元测试,我让 VS2010 自动生成方法 stub 并添加缺少的信息:这是我的代码

[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 进行私有(private)方法测试。

编辑:

我并不是不想使用 PrivateObject.Invoke(它不利于重构)。

最佳答案

我遇到了同样的问题。为了纠正这个问题,我确保 Local.testsettingsTraceAndTestImpact.testsettings 都选择了正确的文件(DebugRelease 等)在“数据和诊断”选项中。

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

关于c# - 如何使用 PrivateObject 在 C# 中对私有(private)方法进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13234836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com