模拟方法结果

2024-03-04

我正在尝试找到一种方法来伪造从另一个方法中调用的方法的结果。

我有一个“LoadData”方法,它调用一个单独的助手来获取一些数据,然后它将对其进行转换(我有兴趣测试转换后的结果)。

所以我有这样的代码:

public class MyClass(){
  public void LoadData(){
    SomeProperty = Helper.GetSomeData();
 }
 public object SomeProperty {get;set;}
}

我想从 Helper.GetSomeData() 方法获得已知结果。我可以使用模拟框架(我对 Rhino Mocks 的经验相当有限,但对任何事情都持开放态度)来强制获得预期结果吗?如果是这样,怎么办?

*编辑 - 是的,正如预期的那样,我无法实现我想要的黑客,我必须找出更好的方法来设置数据。


你那里有问题。我不知道这是否是您代码的简化场景,但如果以这种方式使用 Helper 类,那么您的代码就不可测试。首先,直接使用Helper类,所以你不能用模拟代替它。其次,您正在调用静态方法。我不了解 C#,但在 Java 中你不能重写静态方法.

您必须进行一些重构才能使用虚拟 GetSomeData() 方法注入模拟对象。

在这个简化版本的代码中很难给你一个直接的答案。您有一些选择:

  • 为 Helper 类创建一个接口,并为客户端提供一种将 Helper 实现注入到 MyClass 类的方法。但如果 Helper 实际上只是一个实用程序类,那就没有多大意义了。
  • 在 MyClass 中创建一个名为 getSomeData 的受保护方法,并使其仅调用 Helper.LoadSomeData。然后将 LoadData 中对 Helper.LoadSomeData 的调用替换为 getSomeData。现在您可以模拟 getSomeData 方法以返回虚拟值。

注意不要简单地创建 Helper 类的接口并通过方法注入它。这可以暴露实现细节。为什么客户应该提供一个实现utility类来调用简单的操作?这将增加 MyClass 客户端的复杂性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模拟方法结果 的相关文章

随机推荐