Sam*_*ney 3 c# unit-testing rhino-mocks moq nmock
我知道有人问过类似的问题,但没有找到明确的解决方案。我正在尝试从一个大类中模拟一个私有字段。私有字段在某些较早的方法中实例化,而我正在尝试对引用该字段的后一种方法进行单元测试。
所以我在课堂上有一个更早的方法:
public bool validateAll(ref DataEntry[] oEntries, string sMediaPlanId, ITemplateGenerator oTempGen)
{
...
// private field that I am trying to mock
this._sMediaPlanObjective = (MPWrapper.Instance).getMediaPlanObjective(sMediaPlanId);
...
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试对引用私有字段的方法进行单元测试:
public bool validateFlightObjective(ref MPDataEntry oEntry)
{
...
string entryFlightObjective = oEntry.getFlightObjective();
string mediaPlanObjective = this._sMediaPlanObjective;
if (entryFlightObjective != mediaPlanObjective)
{
return false;
}
...
return true;
}
Run Code Online (Sandbox Code Playgroud)
鉴于我有一个大类,而这只是我要测试的一种方法,是否有可能仅模拟此私有字段的方法?我是缺少基本的东西还是应该考虑其他方法?
您不能模拟任何私有,静态或本质上不可替代的东西(这是免费的模拟库限制)。
你通常在这种情况下做什么(当它出现时该private成员具有进行测试),被提取的private成员,以一个单独的类和注射它来测试类的依赖。
在您的情况下,您实际上需要提取创建代码的代码_sMediaPlanObjective,这是以下行:
this._sMediaPlanObjective =
(MPWrapper.Instance).getMediaPlanObjective(sMediaPlanId);
Run Code Online (Sandbox Code Playgroud)
提供getMediaPlanObjective方法的对象应该注入到测试过的类中。如果这样做,您可以简单地模拟该对象,并告诉它返回的模拟版本_sMediaPlanObjective。
| 归档时间: |
|
| 查看次数: |
9173 次 |
| 最近记录: |