fakeiteasy在构造函数中初始化私有成员

时间:2014-09-07 19:26:22

标签: asp.net-mvc fakeiteasy

我想在我的控制器中测试方法,我知道这个......

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(){ }

}

那么如何在构造函数中隔离所有这些方法调用(所以我不调用其他程序集中的方法?)

1 个答案:

答案 0 :(得分:1)

首先,

myController = new MyController();
A.CallTo(()=>myController.SomeMethodIWantToTest().Returns(someValueIAmTesting);

会导致错误,因为A.CallTo只处理对假货的调用()之后应该有额外的…ToTest()

其次,在这种情况下采取的一般方法称为Dependency Injection。而不是让一个类生成所有依赖项(在您的情况下,通过调用其他程序集中的方法),您可以为其提供依赖项。

假设您能够开始注入依赖项,那么您几乎可以回家了。您已经依赖MyController内的接口,因此您可以使用FakeItEasy向MyController提供假货,从而避免调用out-of-assembly方法。