以下是我想编写单元测试的代码:
public virtual ActionResult TryIt()
{
MemberViewModel viewModel = new MemberViewModel();
_memberViewModelLookupBuilder.PopulateSelectLists(viewModel);
return View(viewModel);
}
我想编写单元测试来伪造MemberViewModel对象,以便我可以为其余的操作编写测试。 像 -
这样的东西A.CallTo(() => viewModel = new TryItViewModel()).Returns(viewModel);
但这不起作用,并提出错误说
"表达式树可能不包含赋值运算符"
有人可以建议我如何实现这个目标吗?
我在我的测试项目中使用xUnit和FakeItEasy。
对此的任何帮助都非常感激。
答案 0 :(得分:2)
FakeItEasy不能对具体方法施加任意行为,例如类构造函数。你必须先假装并配置它。
这可以通过在MemberViewModel
方法中注入假TryIt
来实现。典型的路线是从MemberViewModel
(甚至更好,依赖现有的)提取界面,假冒它,并将其传递给TryIt
。所以TryIt
变为:
public virtual ActionResult TryIt(IMemberViewModel viewModel)
{
_memberViewModelLookupBuilder.PopulateSelectLists(viewModel);
return View(viewModel);
}
在您的生产代码中,您将传递new MemberViewModel
。然后测试会伪造出对象:
var fakeMemberViewModel = A.Fake<IMemberViewModel>();
A.CallTo(() => fakeMemberViewModel.SomeMethod()).Returns(17);
TryIt(fakeMemberViewModel);
…
有关其他示例,请参阅FakeItEasy Quickstart。