我想在我的控制器中测试方法,我知道这个......
myController = new MyController();
A.CallTo(()=>myController.SomeMethodIWantToTest().Returns(someValueIAmTesting);
问题是在无参数构造函数中,我在其他程序集中调用了多个为私有成员设置值的方法,
public class MyController : Controller {
private ILoginBusiness loginBusiness;
private ISomethingElse somethingElse;
//... and so on...
public MyController(){
loginbusiness = ServiceFactory.GetLoginBusiness();
somethingElse = //some method in another assembly that initializes the value
//... and so on, calling methods in other assemblies that initialize the private members...
}
public ActionResult SomeMethodIWantToTest(){ }
}
那么如何在构造函数中隔离所有这些方法调用(所以我不调用其他程序集中的方法?)
答案 0 :(得分:1)
首先,
myController = new MyController();
A.CallTo(()=>myController.SomeMethodIWantToTest().Returns(someValueIAmTesting);
会导致错误,因为A.CallTo
只处理对假货的调用()
之后应该有额外的…ToTest()
。
其次,在这种情况下采取的一般方法称为Dependency Injection。而不是让一个类生成所有依赖项(在您的情况下,通过调用其他程序集中的方法),您可以为其提供依赖项。
假设您能够开始注入依赖项,那么您几乎可以回家了。您已经依赖MyController
内的接口,因此您可以使用FakeItEasy向MyController
提供假货,从而避免调用out-of-assembly方法。