gpt4 book ai didi

c# - 使用 Rhino Mocks 模拟私有(private)对象调用

转载 作者:太空宇宙 更新时间:2023-11-03 20:30:22 24 4
gpt4 key购买 nike

所以我只是习惯了 mock 东西。我这里有这个私有(private)变量:

private CoreDataContext _coreDataManager;

关于这门课:

public class RatesControlReport
: Chatham.Panda.Batch.ProcessDefinition.BatchProcess

这个类有一个 void我要测试的方法称为 CheckSwaptionVols(DateTime runDate) .

在测试的第一部分,我可以实例化主类:

RatesControlReport ratesControlReportProcess;
ratesControlReportProcess = new RatesControlReport();

基本上我想打这个电话:

ratesControlReportProcess.CheckSwaptionVols(DateTime.Now);

然而,此方法使用私有(private)变量,如下所示:

System.Data.Linq.ISingleResult<CheckSwaptionVols> swaptionStatusResult = _coreDataManager.CheckSwaptionVols(this._runDate);

我希望能够传入此变量的模拟版本并返回我自己指定的 System.Data.Linq.ISingleResult<CheckSwaptionVols>因此测试可以在不依赖数据库的情况下继续进行。

我该怎么做?

最佳答案

好吧,这取决于您实例化 CoreDataContext 的位置。如果这是在静态上下文或构造函数中构造的,则实际上没有办法为它创建模拟。这就是为什么在对象内部实例化依赖项通常被认为是不好的做法。你需要做的是提供一些依赖注入(inject)的方法。这可以像重载构造函数一样简单:

public RatesControlReport(CoreDataContext context)
{
_coreDataManager = context;
}

...如果你绝望的话,甚至是一个内部方法:

internal void InjectContext(CoreDataContext context)
{
_coreDataManager = context;
}

但是,一般来说,在构建 RatesControlReport 时始终提供您的 CodeDataContext 对象被认为是最佳实践。这会将数据访问与业务逻辑分开,使您能够更有效地对这两个类进行单元测试。

关于c# - 使用 Rhino Mocks 模拟私有(private)对象调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7837241/

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