如何使用最小起订量设置控制器的方法

How to setup a controller's method using moq

我的控制器中有一个操作方法如下

public ActionResult Index()
{
     var supplier = GetSupplierForUser();
     var model = SupplierService.GetOutstandingItems(supplier);          
     return View(model);
}

我已将供应商服务方式设置为

var supplierService = new Mock<ISupplierService>();
var supplier = new Supplier { Name = "Some Name",Id = 100};

supplierService.Setup(s => s.GetOutstandingItems(supplier))
                            .Returns(outstandingSupplierItemInfo.Object);

我不知道我们如何将基础控制器中存在的方法 Supplier GetSupplierForUser() 设置为 return 供应商对象。从上面的最小起订量设置中,空供应商总是传递给 SupplierService.GetOutstandingItems(supplier)

有什么想法吗?谢谢

也许你需要:

supplierService.Setup(s => s.GetOutstandingItems(It.IsAny<Supplier>()))
    .Returns(outstandingSupplierItemInfo.Object);

It.IsAny<> 内容将使您的 Setup 匹配任何传入对象(参数)。

由于您使用了松散的模拟,如果没有 Setup 匹配有问题的参数,Moq 将只是 return null。考虑使用 MockBehavior.Strict 代替异常。

如果不使用 It.IsAny<>,Moq 将不得不尝试查看传递给 Moq 的供应商,"is equal to" 您制作 supplier 时使用的Setup。在这里,您的类型(classstructSupplier 具有的 .Equals(...) 语义变得很重要。

如果您没有相关的 Equals 语义,但仍想将 Setup 限制在特定情况下,请试试这个:

supplierService
    .Setup(s => s.GetOutstandingItems(It.Is((Supplier s) => s.Name == "Some Name" && s.Id == 100)))
    .Returns(outstandingSupplierItemInfo.Object);