1

使用 Moq 或 Rhino,我想在我的 MVC 操作方法之一中模拟一个局部变量。

例如,在我的程序中,我有一个“ProfileController”,其方法如下所示:

        public ActionResult Profile(ProfileOptions oProfile)
        {
            ProfileViewModel oModel = new ProfileViewModel(); // <--can I mock this?

            //… do work, using oModel along the way

            return View(oModel);

         }

我的测试将在测试类的[SetUp]方法中创建一个新的 ProfileController,并且我会使用它对其操作方法运行各种测试。

我想在测试中oModel调用该Profile方法时模拟上面的变量,但由于它是本地的并且不是通过注入传递的,我可以以某种方式做到这一点吗?

4

1 回答 1

0

如果您确实需要模拟对象,则可以使用在类级别声明和实例化的构造方法/类型,然后模拟该类型。

public class MyController
{
    // If you're using DI, you should use constructor injection instead of this:
    protected IProfileViewModelBuilder _builder = new ProfileViewModelBuilder();

    ...
    public ActionResult Profile(ProfileOptions oProfile)
    {
        ProfileViewModel oModel = _builder.Build(); // <--I CAN mock this!

        //… do work, using oModel along the way

        return View(oModel);

     }
    ...

}

这种方法的一个好处是,如果将来您的 ViewModel 的创建变得更加复杂,则所需的任何更改都将被隔离到一个位置。

希望有帮助,

麦克风

于 2013-01-16T16:22:02.057 回答