gpt4 book ai didi

c# - 模拟方法结果

转载 作者:太空狗 更新时间:2023-10-29 17:33:52 24 4
gpt4 key购买 nike

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

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

所以我有这样的代码:

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

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

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

最佳答案

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

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

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

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

谨防简单地创建一个 Helper 类的接口(interface) 并通过方法注入(inject)它。这可以公开实现细节。为什么客户端应该提供一个实用程序类的实现来调用一个简单的操作?这将增加 MyClass 客户端的复杂性。

关于c# - 模拟方法结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/90657/

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