これは私のテストMOQ:抽象クラスの確認、保護メソッドが呼び出され
[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回であった:モック=> mock.ValidatePurchaseOrders(It.IsAny())
設定された設定:mock => mock.ValidatePurchaseOrders(It.IsAny())、Times.Never No 呼び出しが実行されました。
私は間違っていますか?
注:
- Moq.4.0.10827
更新:
私は2番目の引数として、それにパラメータを追加する必要があるので、それは、この行mockRepo.Protected().Setup("ValidatePurchaseOrders");
だと思いますしかし、私はそれを正しいように見せることはできません。
更新2: いくつかの変更を加えましたが、コンパイルされましたが、正しくカウントされていません。エラーメッセージとコードは上記のとおりです。
プライベートAPurchaseOrderRepository _repository;に変更されました。同じエラー – CaffGeek
ああ、それは保護されたメンバーだからです。どちらか公開するか、この質問が役立つかもしれません:http://stackoverflow.com/questions/3883835/verify-that-a-base-protected-method-is-called-with-moq-3-1 –
私はそれを考えるこの行はmockRepo.Protected()。Setup( "ValidatePurchaseOrders");です。なぜなら、2番目の引数としてパラメータを追加する必要があるからですが、正しく取得できないようです。 – CaffGeek