使用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
变量,但由于它是本地的而不是通过注入传入,我可以以某种方式这样做吗?
答案 0 :(得分: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的创建变得更加复杂,则所需的任何更改都会被隔离到一个位置。
希望有所帮助,
麦克