gpt4 book ai didi

c# - 模拟私有(private)领域

转载 作者:行者123 更新时间:2023-11-30 15:03:50 29 4
gpt4 key购买 nike

我知道有人问过类似的问题,但我还没有找到明确的解决方案。我正在尝试从一个大类(class)中模拟一个私有(private)领域。私有(private)字段在一些较早的方法中被实例化,我正在尝试对引用该字段的后一种方法进行单元测试。

所以我在类里面有一个较早的方法:

public bool validateAll(ref DataEntry[] oEntries, string sMediaPlanId, ITemplateGenerator oTempGen)
{
...
// private field that I am trying to mock
this._sMediaPlanObjective = (MPWrapper.Instance).getMediaPlanObjective(sMediaPlanId);
...
}

我正在尝试对引用私有(private)字段的方法进行单元测试:

public bool validateFlightObjective(ref MPDataEntry oEntry)
{
...
string entryFlightObjective = oEntry.getFlightObjective();
string mediaPlanObjective = this._sMediaPlanObjective;

if (entryFlightObjective != mediaPlanObjective)
{
return false;
}
...

return true;
}

鉴于我有一个大类(class),而这只是我想测试的一种方法,是否有一种可能的方法来模拟这个私有(private)字段?我是不是遗漏了一些基本的东西,还是应该考虑其他方法?

最佳答案

您不能模拟任何私有(private)的、静态的或本质上不可覆盖的东西(这是一个免费的模拟库limitation)。

在这种情况下(当 private 成员 has 需要测试时),您通常会做的是将您的 private 成员提取到一个单独的类和inject它作为依赖项被测试类。

在您的情况下,您实际上需要提取创建 _sMediaPlanObjective 的代码,即这一行:

this._sMediaPlanObjective =
(MPWrapper.Instance).getMediaPlanObjective(sMediaPlanId);

提供 getMediaPlanObjective 方法的对象应该被注入(inject)到您的测试类中。如果这样做,您可以简单地模拟该对象并告诉它返回 _sMediaPlanObjective 的模拟版本。

关于c# - 模拟私有(private)领域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11213553/

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