我如何使用 FakeItEasy 伪造 Class used insite SUT

How can I fake a Class used insite SUT using FakeItEasy

我很难理解使用 FakeItEasy 可以做什么和不能做什么。假设我有一个 class

public class ToBeTested{

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

然后我做了类似下面的事情来伪造受抚养人 class

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

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

有什么想法吗?

谢谢 K

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

你必须能够将伪造的 class 注入到要测试的代码中,或者(如你所说)通过 MethodToBeTested 的参数或者可能通过 ToBeTested 的构造函数或属性。

如果你做不到,FakeItEasy 将无法帮助你。

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