这是我的测试
[TestClass]
public class RepositoryTests
{
private APurchaseOrderRepository _repository;
[TestInitialize]
public void TestInitialize()
{
_repository = new FakePurchaseOrderRepository();
}
[TestMethod]
public void RepositoryGetPurchaseOrdersForStoreCallsValidatePurchaseOrders()
{
var store = new Store();
var mockRepo = new Mock<APurchaseOrderRepository>();
mockRepo.Protected().Setup("ValidatePurchaseOrders", ItExpr.IsAny<List<PurchaseOrder>>());
_repository.GetPurchaseOrders(store);
mockRepo.Protected().Verify("ValidatePurchaseOrders", Times.Once(), ItExpr.IsAny<List<PurchaseOrder>>());
}
}
APurchaseOrderRepository 和它的界面看起来像这样
public interface IPurchaseOrderRepository
{
List<PurchaseOrder> GetPurchaseOrders(Store store);
}
public abstract class APurchaseOrderRepository : IPurchaseOrderRepository
{
public abstract List<PurchaseOrder> GetPurchaseOrders(Store store);
protected virtual bool ValidatePurchaseOrders(List<PurchaseOrder> purchaseOrders)
{
return true;
}
}
还有我的假货
public class FakePurchaseOrderRepository : APurchaseOrderRepository
{
public override List<PurchaseOrder> GetPurchaseOrders(Store store)
{
var purchaseOrders = new List<PurchaseOrder>();
ValidatePurchaseOrders(purchaseOrders);
return purchaseOrders;
}
}
但是,我的测试失败了:
测试方法 PreSwapTests.RepositoryTests.RepositoryGetPurchaseOrdersForStoreCallsValidatePurchaseOrders 抛出异常:Moq.MockException:预期在模拟上调用一次,但为 0 次:模拟 => 模拟.ValidatePurchaseOrders(It.IsAny())
配置的设置:mock => mock.ValidatePurchaseOrders(It.IsAny()), Times.Never 没有执行调用。
我究竟做错了什么?
笔记:
- 最小起订量 4.0.10827
更新:
我认为是这一行mockRepo.Protected().Setup("ValidatePurchaseOrders");
,因为我需要将参数添加到它作为第二个参数,但我似乎无法正确理解。
更新 2:进行了一些修改,现在它可以编译了,但计数不正确......或者其他东西,错误消息和代码都在上面更新了。