如何设置MVC模拟.设置和.返回存储库方法,该方法具有 on out 参数和返回类型



我需要模拟存储库中的方法,但该方法有一个 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);

查看有关回调的官方文档。

最新更新