私は過去1週間ほどMoqを使用していましたが、今日まで問題はありませんでした。 VerifyAll()
を私のモックの設定と適切に一致させることに問題があります。Moqで設定が一致する際の問題
私は現在、アプリケーションのAPIの単体テストを書いています。私はサービスオブジェクトをからかった後、嘲笑サービスを使用してAPIオブジェクトを構築しています、これを考慮して
API <==> Service <==> DAO <==> Database
:ここでは、アプリケーションが構成されている方法です。私はすでにこれまで問題なく、いくつかの単体テストを書いてきました。
私はこのような2つのインスタンス変数があります。私は、セットアップの方法でこれらを初期化
private Api _api;
private Mock<IHibernateService> mockService;
を:ここで
[SetUp]
public void DoSetupTasks()
{
mockService = new Mock<IHibernateService>();
_api = new Api(mockService.Object);
}
が失敗しているユニットテストです:
[Test]
public void TestSearchOnAllProperties()
{
mockService
.Setup(service => service.LoadAll(It.IsAny<Type>()))
.Returns(new DomainBase[0]);
var dmbs = _api.SearchOnAllProperties("search term", typeof(DomainBase));
mockService.VerifyAll();
}
APIのSearchOnAllProperties()
メソッドは、その後、サービスのを呼び出しますメソッド(いくつかの付加的なロジックがあります)を使用しているので、適切に呼び出されていることを確認したいと思います。明確にするために、ここでLoadAll()
はSearchOnAllProperties()
に呼び出されている方法は次のとおりです。私はユニットテストを実行すると
public IEnumerable<DomainBase> SearchOnAllProperties(string searchTerm, Type type)
{
foreach (DomainBase dmb in _hibernateService.LoadAll(type))
{
// additional logic
}
}
しかし、私は与えられた設定が一致していなかったことを知らせるMockVerificationException
を取得します。なぜ私はサービスのLoadAll()
メソッドを呼び出す必要があるのか分かりません。
私はmockServiceと_APIを初期化しようとしたことを明らかにしている必要がありますテストケース内でローカルに実行され、問題は解決されません。 –
@タイラー、私はあなたのコードをコピーし、それは合格したので、Moqの問題ではありません。あなたの 'Api'クラスは内部の' IHibernateService'変数を新しいインスタンスに割り当てることができる何かをしていますか? –
これは、一致するメソッド呼び出しが別の式の一部である場合に問題になるようです: 'foreach(タイプt in _hibernateService.GetAllDomainTypes()。Where(t => t.BaseType!= null && t.BaseType.Name == "DomainBase" &&!t.IsAbstract) '。モックをstrictに設定しましたが、例外はありません。メソッドが全く呼び出されていないようです。 –