繁体   English   中英

如何使用Rhino模拟仅模拟测试对象中的一个值?

[英]How can I use Rhino mocks to mock just one value in a test object?

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

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

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

理想情况下,我希望能够执行的操作是获取一个“真实”(即,如代码中所指定)的加载程序对象,该对象执行“真实” Execute方法,但对于该特定字符串具有“模拟”值。 但是我真的不确定如何使用Rhino Mocks做到这一点-即使有可能。 有问题的字符串属性不是抽象的或任何东西,它是受保护的,实际上是只读的。 这是“加载程序”内部的外观:

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

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

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

干杯,马特

如果您不想注入_Service,则还有两个选择:

创建一个从ChannelLoad继承的类(将其称为“ TestableChannelLoader”或诸如此类),然后

  1. 覆盖DbConnectionString-Property或

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

我看到加载程序具有对_Service的依赖。 因此,您需要将此依赖关系的模拟注入到加载器,以更改DbConnectionString属性的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM