Asp.net mvc 如何使用FakeiTasy伪造对象初始化?
以下是我想为其编写单元测试的代码:Asp.net mvc 如何使用FakeiTasy伪造对象初始化?,asp.net-mvc,unit-testing,fakeiteasy,Asp.net Mvc,Unit Testing,Fakeiteasy,以下是我想为其编写单元测试的代码: public virtual ActionResult TryIt() { MemberViewModel viewModel = new MemberViewModel(); _memberViewModelLookupBuilder.PopulateSelectLists(viewModel); return View(viewModel); } 我想编写单元测试来伪造MemberViewModel对象,这样我就可以为操作中的
public virtual ActionResult TryIt()
{
MemberViewModel viewModel = new MemberViewModel();
_memberViewModelLookupBuilder.PopulateSelectLists(viewModel);
return View(viewModel);
}
我想编写单元测试来伪造MemberViewModel对象,这样我就可以为操作中的其余操作编写测试。
类似于-
A.CallTo(() => viewModel = new TryItViewModel()).Returns(viewModel);
但这不起作用,并给出了一个错误的说法
“表达式树不能包含赋值运算符”
谁能告诉我如何才能做到这一点
我正在测试项目中使用xUnit和FakeiTesy
非常感谢在这方面的任何帮助。Fakeitesy不能将任意行为强加给具体方法,例如类构造函数。你必须从一个假的开始并配置它 这可以通过将伪
MemberViewModel
注入TryIt
方法来实现。典型的方法是从MemberViewModel
中提取一个接口(或者更好地说,依赖一个现有的接口),伪造它,然后将它传递给TryIt
。因此TryIt
变成:
public virtual ActionResult TryIt(IMemberViewModel viewModel)
{
_memberViewModelLookupBuilder.PopulateSelectLists(viewModel);
return View(viewModel);
}
在生产代码中,您将传入一个新成员视图模型
。然后,测试将伪造对象:
var fakeMemberViewModel = A.Fake<IMemberViewModel>();
A.CallTo(() => fakeMemberViewModel.SomeMethod()).Returns(17);
TryIt(fakeMemberViewModel);
…
var fakeMemberViewModel=A.Fake();
A.CallTo(()=>fakeMemberViewModel.SomeMethod()).Returns(17);
TryIt(fakeMemberViewModel);
…
另一个例子,请参阅。如果我没有错的话,我认为Mock框架提供了使用“Setup”方法伪造类构造函数的能力。不确定提供的解决方案是否适用于更大规模的项目。我的意思是,为每个ViewModel创建接口应该不是一件容易的事情。我相信Fakeitesy应该有一些机制来实现这一点。@Nirman,我不理解你所有的评论:“我认为Mock framework提供了使用“Setup”方法伪造类构造函数的能力,”除此之外,我看到建议的方法每天都在相当大的企业软件系统中起作用。尽管如此,我知道这并不那么方便。由于Fakeitesy是建立在平台上的,因此伪造施工人员是不可行的。但是,其他模拟框架,如和,确实支持模拟构造函数。