web-dev-qa-db-ja.com

MoqのVerifiable()の目的は何ですか?

Verifiable()の目的は何ですか?

Mockを検証し、これを省略すると、SetUpが検証されます。

編集:私はVerifyAll()を使用していたため、すべてが検証された理由です。 Verify()に変更した後、私の.Verifiable()SetUpsのみがチェックされていました。

113
Castrohenge

補遺:他の回答が述べているように、.Verifiableの目的は、SetupVerify(...)を介してトリガーできる一連の「遅延mock.Verify()呼び出し」に参加させることです。

OPの明確化により、これが目標であり、唯一の問題はそれが機能しなかった理由を解明することだけであることが明らかになりましたが、@ Liamが指摘したように、答えもこれに実際に触れる必要があります:- 私が見る限りの主要なユースケースは次のとおりです。

  • mock.Setup()mock.Verifyの間の乾燥を維持する
  • 実際のVerify呼び出し自体から検証の構成を切断できるようにします(たとえば、別のヘルパーメソッドでセットアップできます)

...そして私の答えに戻ります。簡潔に言うと、「上記の長所は、これらの目標を達成することで、そのような構成要素に頼りすぎるテストの読みやすさと保守性に影響を与えると一般に考えられているので注意してください」

ORIGINAL:可能な場合は、代わりに [〜#〜] aaa [〜#〜] レイアウトに従う必要があり、したがって 明示的に行う必要があることに注意してくださいmock.Verify( expression )は、mock.Setup( ... ).Verifiable()またはmock.Verify() とペアになっているmock.VerifyAll()ではなく、作業完了後に呼び出します(クレジット: @ kzu )。

77
Ruben Bartelink

Verify()メソッドがテストの終了時に呼び出され、検証可能としてマークされた期待値のいずれかが呼び出されていない場合、例外はthrownです。

VerifyAll()は、検証可能な期待値をチェックしません。

46
Suvesh Pratapa