2011-01-24 97 views
1

对我们的代码做了一些更改,现在我需要重新考虑一些单元测试,以确保它们与新代码兼容。我遇到了一个问题。在此:如何使用Rhino mock在测试对象中模拟一个值?

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

现在的“加载器”对象,尝试连接到另一个对象,以得到一个字符串值,而被自动返回的字符串前。所以明显的解决方案是嘲笑该对象为测试返回合适的值。然而,由于各种原因,我不能轻易做到这一点。

理想情况下,我希望能够做到的是获得一个“真正的”(即如代码中指定的)加载器对象,该对象执行“真正的”Execute方法,但具有特定的“模拟”值串。但我真的不知道如何做到这一点 - 即使可能 - 与Rhino Mocks。问题中的字符串属性不是抽象的或任何 - 它是受保护的,它实际上是只读的。这是它的外观里面的“加载”:

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

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

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

干杯, 马特

回答

3

两个选项,你不想注入_Service:

创建从ChannelLoad(称之为“TestableChannelLoader”什么的)继承的类和

  1. 覆盖DbConnectionString-物业或

  2. 提取方法“GetConnectionString”,你可以在你的新类中重写并调用它在DbConnectionString-物业

2

我看到装载机具有依赖性_Service。所以,你需要将这个依赖的模拟注入到加载器中,以便更改DbConnectionString属性的行为。如果其他

+0

如果不进行重大重构,我无法做到这一点 - 是否真的是唯一的选择? – 2011-01-24 12:23:04

相关问题