gpt4 book ai didi

c# - 我如何使用 Rhino mocks 来模拟测试对象中的一个值?

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

一直在对我们的代码进行一些更改,现在我需要重构一些单元测试以确保它们与新代码兼容。我遇到了一个问题。在这方面:

            ChannelLoad loader = new ChannelLoad(_customerDbMock, _bulkCopyMock);
loader.Execute(taskId);

“loader”对象现在正在尝试连接到另一个对象以获取字符串值,而在该字符串被自动返回之前。因此,显而易见的解决方案是模拟该对象以返回适合测试的值。但是由于种种原因,我不能轻易做到这一点。

理想情况下,我想做的是获得一个“真实的”(即代码中指定的)加载器对象,该对象执行“真实的”Execute 方法,但该特定字符串具有“模拟”值.但我真的不确定如何使用 Rhino Mocks 来做到这一点——即使有可能。有问题的字符串属性不是抽象的或任何东西——它是 protected ,实际上是只读的。这是它在“loader”中的样子:

    protected string DbConnectionString
{
get
{
return _Service.GetLocalDatabase().GetConnectionString(_Service);
}
}

问题是对于测试环境“GetLocalDatabase”什么都不返回。

有人帮我吗?有没有一种方法可以使用 Rhino Mocks 对此进行模拟,或者是我重构代码以使其不依赖外部对象的唯一选择?如果是后者,指针也会有所帮助。

干杯,马特

最佳答案

如果您不想注入(inject) _Service,还有两个其他选项:

创建一个继承自 ChannelLoad 的类(将其命名为“TestableChannelLoader”或其他名称)

  1. 覆盖 DbConnectionString-Property 或

  2. 提取您可以在新类中覆盖的方法“GetConnectionString”,并在 DbConnectionString-Property 中调用它

关于c# - 我如何使用 Rhino mocks 来模拟测试对象中的一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4781675/

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