我需要模拟存储库中的方法,但该方法有一个 out 参数和一个返回类型(类型为 ExBool 类,用于设置状态和错误消息(。 它需要返回帐户设置列表。 这些设置将应用于从视图回发的数据。 我本来希望从 Dbase 获取真实值 (accountSetups(,但似乎我需要在该存储库的模拟中创建虚拟值。 那么,问题是如何在检索到的"帐户设置"中设置虚拟值?
测试方法将测试传入的串联字符串是否采用帐户设置指定的格式。
存储库(注入控制器(使用 Ninject(
(:public interface IAccountSetupBo
{
ExBool List(out List<AccountSetup> accountSetups);
}
我的测试:
ExBool result = new ExBool(); // this is the method's return type
private List<AccountSetup> accountSetups; //This is the list of setups reurned by the 'out' parameter, in the List method.
[TestInitialize]
public void SetUp()
{
// Inject with Mock, which creates a proxy..not a concrete instance
mockedAccountSetupBo = new Mock<IAccountSetupBo>();
mockedAccountSetupBo
.Setup(x => x.List(out accountSetups))
.Returns(result);
}
谢谢
在设置之前填充集合
ExBool result = new ExBool(); // this is the method's return type
[TestInitialize]
public void SetUp() {
List<AccountSetup> accountSetups = new List<AccountSetup>() {
//...populate with desired objects
}
// Inject with Mock, which creates a proxy..not a concrete instance
mockedAccountSetupBo = new Mock<IAccountSetupBo>();
mockedAccountSetupBo
.Setup(x => x.List(out accountSetups))
.Returns(result);
}
并且在调用模型时会延迟评估。
另一种方法是在moq
提供的Callback
钩中使用delegate
。像这样:
public delegate void SetupOutList(out List<AccountSetup> a);
mockedAccountSetupBo
.Setup(x => x.List(out It.Ref<List<AccountSetup>>.IsAny))
.Callback(new SetupOutList((out List<AccountSetup> a) =>
{
a = new List<AccountSetup>{...}; // initialize your list
})
.Returns(result);
查看有关回调的官方文档。