2

現在、私はまだ単体テストの土地に住んでいるのか、それともすでに統合テストの土地に残されているのかはわかりませんが、テスト手法をより深く調べています。

少し詳しく説明すると、2 つのコンポーネント A と B があり、A が B を使用している場合、B には特定の「上方契約」があり、A には特定の「下方契約」があります。基本的にこれは次のことを意味します。 B が正しく動作すると、両方の契約が履行され、物事が正しく機能します。

モックは、特定のテストケースに必要な上方契約のサブセットを保証する方法だと思います。たとえば、データ レコードが以前に挿入されている場合、データベース接続には、データ レコードを取得する上向きの契約がある場合があります。データベース接続モックは、データベースへの挿入を必要とせずに、特定のレコードを返すことを保証します。

しかし、現在、下方契約も検証する方法があるかどうか疑問に思っています. データベース接続の例を考えると、下位契約は次のようになります。データベースに接続し、接続が存在して機能していることを確認し、正しい SQL クエリを入力する必要があります。

誰かがこのようなことをしますか?これは、より複雑な契約の作業に値しますか? (たとえば、データベース接続では、データベース層への呼び出しを完全に検証するために SQL パーサーが必要になる場合があります)

こんにちは、テタ

4

2 に答える 2

1

誰かがこれをしますか?

はい、モックを使用して「下方契約」を検証することがあります。

たとえば、DB モックを使用して、正しい認証情報がログインに使用されているかどうかを確認できます。特に、他のサブシステムへのインターフェースがある場合は、それらをモックアップして、モックアップに使用法違反をチェックさせることができます。

たとえば、サブシステムが初期化呼び出しまたは何らかの登録を必要とする場合、サブシステム インターフェイスのモックアップもこれを強制できます。


仕事の価値はありますか?

テストをどれだけ深くしたいかによって異なります。さまざまな「深さ」の例をいくつか挙げましょう。

  1. インターフェイスへの呼び出しの正しい順序を確認したい場合は、単純なステート マシンで十分な場合があります。
  2. インターフェイス言語 (あなたの例では SQL) の適切な使用法を確認したい場合は、パーサーを使用する必要があります。
  3. 実際のサブシステムで実際に動作することを確認したい場合は、統合テストを行います (モックアップでは実行できません)。

結論:

適切な場合は、それを行う必要があります。ただし、モックアップでインターフェースの間違った使用法をすべて見つけることは期待できません。たとえば、2 つの同時トランザクションによってデッドロックが発生した場合、データベースのモックアップはほとんど検出しません。

于 2008-11-08T10:54:18.373 に答える
1

これがモックとスタブの実際の違いです。モックはそれを正確に検証します (または、少なくともそうすることができます。ほとんどのフレームワークでモックをスタブとして使用できます)。基本的に、モックを使用すると、「X を呼び出すと Y を渡す」だけでなく、プロトコル テストを実行できます。私が使用したすべてのモッキング フレームワークでは、「これらの呼び出しはすべて行われた」や「これらの呼び出しは特定の順序で行われた」などを簡単に確認できます。

コンポーネント間でより多くのプロトコルを強制するほど、テストはより脆弱になります - 時にはそれは完全に適切です (たとえば、「他の操作を実行する前に認証する必要があります」)。合理的な方法であっても、実装を変更します。

于 2008-11-08T10:54:51.133 に答える