如何使用FakeItEasy伪造对象启动?

时间:2015-10-15 12:15:30

标签: asp.net-mvc unit-testing fakeiteasy

以下是我想编写单元测试的代码:

public virtual ActionResult TryIt()
{
    MemberViewModel viewModel = new MemberViewModel();

    _memberViewModelLookupBuilder.PopulateSelectLists(viewModel);

    return View(viewModel);
}

我想编写单元测试来伪造MemberViewModel对象,以便我可以为其余的操作编写测试。 像 -

这样的东西
A.CallTo(() => viewModel = new TryItViewModel()).Returns(viewModel);

但这不起作用,并提出错误说

  

"表达式树可能不包含赋值运算符"

有人可以建议我如何实现这个目标吗?

我在我的测试项目中使用xUnit和FakeItEasy。

对此的任何帮助都非常感激。

1 个答案:

答案 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