如何使用 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。
以下是我要为其编写单元测试的代码:
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。