如何使用 FakeItEasy 伪造对象初始化?

How to fake the object initiation using FakeItEasy?

以下是我要为其编写单元测试的代码:

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

    _memberViewModelLookupBuilder.PopulateSelectLists(viewModel);

    return View(viewModel);
}

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

A.CallTo(() => viewModel = new TryItViewModel()).Returns(viewModel);

但这不起作用,并给出一个错误

"An expression tree may not contain an assignment operator"

任何人都可以告诉我如何实现这一目标吗?

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

非常感谢任何帮助。

FakeItEasy 无法对具体方法强加任意行为,例如 class 构造函数。你得从假的开始,配置一下。

这可以通过在 TryIt 方法中注入伪造的 MemberViewModel 来实现。典型的路线是从 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