我如何使用 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 来处理您描述的那种情况,并且效果很好。
我很难理解使用 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 来处理您描述的那种情况,并且效果很好。