我的控制器中有一个动作方法,如下所示
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()
以返回Supplier对象。从上面的moq设置,空供应商始终传递到SupplierService.GetOutstandingItems(supplier)
有什么想法吗?感谢
答案 0 :(得分:2)
也许你需要:
supplierService.Setup(s => s.GetOutstandingItems(It.IsAny<Supplier>()))
.Returns(outstandingSupplierItemInfo.Object);
It.IsAny<>
内容将使Setup
匹配任何传入对象(参数)。
由于您使用松散的模拟,如果没有Setup
匹配相关的争论,Moq将返回null
。请考虑使用MockBehavior.Strict
代替例外。
如果您不使用It.IsAny<>
,Moq必须尝试查看传递给Moq的供应商&#34;是否等于&#34;您创建supplier
时使用的Setup
。您的类型.Equals(...)
或class
)struct
具有Supplier
语义,这一点很重要。
如果您没有相关的Equals
语义,但仍希望将Setup
限制为特定情况,请尝试以下方法:
supplierService
.Setup(s => s.GetOutstandingItems(It.Is((Supplier s) => s.Name == "Some Name" && s.Id == 100)))
.Returns(outstandingSupplierItemInfo.Object);