【问题标题】:How can I fake a Class used insite SUT using FakeItEasy如何使用 FakeItEasy 伪造现场 SUT 使用的类
【发布时间】:2015-02-26 15:08:31
【问题描述】:

在理解使用 FakeItEasy 不能做什么和不能做什么时有点麻烦。假设我有一堂课

public class ToBeTested{

   public bool MethodToBeTested(){
      SomeDependentClass dependentClass = new SomeDependentClass();
      var result = dependentClass.DoSomething();
      if(result) return "Something was true";
      return "Something was false";
   }
 }

我做了类似下面的事情来伪造依赖类

 var fakedDepClass = A.Fake<DependentClass>();
 A.CallTo(fakedDepClass).WithReturnType<bool>().Returns(true);

我在测试 MethodToBeTested 时如何使用这个 fakedDepClass。如果 DependentClass 作为参数传递,那么我可以传递我的 fakedDepClass,但在我的情况下它不是(这也是我无法控制的遗留代码)。

有什么想法吗?

谢谢 克

【问题讨论】:

    标签: fakeiteasy


    【解决方案1】:

    MethodToBeTested 内部调用new SomeDependentClass() 意味着你得到一个具体的实际SomeDependentClass 实例。这不是假货,也不能是 FakeItEasy 假货。

    您必须能够(如您所说)通过MethodToBeTested 的参数或通过ToBeTested 的构造函数或属性之一将伪类注入要测试的代码中。

    如果您不能这样做,FakeItEasy 将无法为您提供帮助。

    如果您没有能力更改ToBeTested(我会问您为什么要为它编写测试,但这是一个问题),您可能需要使用另一个隔离框架。我用TypeMock Isolator 来处理你描述的那种情况,效果很好。

    【讨论】:

    • 就像我之前说的,我正在尝试围绕遗留代码编写一些测试,我没有更改 SUT 的奢侈。我确实看过 TypeMock,它确实让我能够伪造特定类的所有实例(我对其进行了测试,它工作得很好)。感谢您的回复。
    • @KarthikBalasubramanian 为什么不能更改旧代码?
    • 遗留代码正在生产中,被大量其他应用程序使用。目前没有针对它编写的测试。
    猜你喜欢
    • 2012-06-02
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多