4

RoyOsheroveの本[UnitTesting][1]の本の中で、彼は、単一のユニットテストには0から1のモックを含めるべきだと説明しています。彼は、テストがモックを主張していない場合は、モックをまったく使用しないことを提案しています。彼はさらに、モックと同様に作成されたスタブを生成するために分離フレームワークを使用する方法を示しています。彼は、テストごとに作成されるスタブの数に推奨される制限を設けていません。

私の質問はこれです:それらの推奨事項はすべての分離フレームワーク(またはすべての一般的なC#フレームワーク)に適用できますか?言い換えれば、スタブではなくモックのみを生成できるフレームワークはありますか?モックとスタブを区別しない分離フレームワークはありますか?

Osheroveの推奨事項をコーディング標準に簡単に変換できることに興味があります。

[1]:http://テスト対象のシステムはまったくテストされていません。代わりに、モックから返されたデータがテストされています。

4

7 に答える 7

2

PhilipCalçadoは最近これについて書いています:http://fragmental.tw/2010/12/14/one-mock-per-test-considered-not-awesome/。要するに、彼は、テストにモック/スタブがいくつあるかに焦点を合わせると、主な関心事である適切な仕様を書くことからあなたをそらすと言います。

于 2011-01-05T16:32:50.563 に答える
2

これは、テストごとに1つのアサーションのみを実行するというOsheroveの推奨に直接対応しています。彼のレキシコンでは、astubはテスト対象システムに偽の入力を提供するクラスであり、amockはテスト対象システムからの出力を(偽のクラスを使用して)テストできるようにするクラスです。

フレームワークが同様の命名規則を使用するかどうかは設計者次第ですが、標準(彼の推奨に同意する場合)は、テストごとに1つのアサーションのみが実行され、アサーションが偽のオブジェクトを必要とする場合、つまり1つの偽のオブジェクトのみである必要があります。テストごとにテストする必要があります。

もちろん、誰もが彼の推薦に同意するわけではないので、誰もがこのようにそうするわけではありません。

于 2011-01-05T16:01:27.857 に答える
1

それらを区別しないMoqのようなフレームワークがあります。FakeItEasyはさらに進んで、すべてを偽のオブジェクトと呼びます。

はい、モックはよりスマートなスタブであるため、適用できます。複数のモックでアサートしない限り、スタブがモックとして呼び出されてもそれほど重要ではありません。言い換えれば、その推奨事項は、テストごとに1つのことだけを主張することに関するものです。モックとスタブを明示的に区別することはそれほど重要ではありません。

于 2011-01-05T15:58:40.220 に答える
1
> can those recommendations 
> [a single unit test should contain between 0 and 1 mocks] 
> be applied to all isolation frameworks ?

私は思う:あなたがこれらの定義を仮定するならば、ほとんどの場合はい

  • Unittest =単独でテストします(それ以外の場合はUnittestではありません)
  • 1つの機能に対して1つの単体テスト
  • スタブまたはフェイクは分離を可能にするオブジェクトですが、検証機能がなく、
  • モックは、検証も可能にする追加機能を備えたスタブです
于 2011-01-05T16:14:58.347 に答える
0

Moq私はモッキングに使用しますここで入手してください

「スタブ」の正確な意味はわかりませんが、おそらくMoles from Microsoftかなりクールなものだと思います。ここ

どちらも本当に面白くてとても使いやすいです。

于 2011-01-05T15:59:30.950 に答える
0

この種のルールは「補助輪」と見なされるべきです。明らかに、多くのスタブとモックを含むテストはプロットを失いましたが、テストごとに1つのアサーションまたは期待を主張することはあまりにも制限的です。参照されているCalçadoリンクが指摘しているように、重要なのは、テストごとに1つの概念があることです。これには、ポイントを示すためのいくつかのアサーションまたは期待が含まれる場合があります。あなたがすべき最後のことは、そのような基準を実施することです。

もう1つ、モックオブジェクト全体ではなく、ここでの「期待」、つまり個々の相互作用について話し合う必要があります。実際には、それらは同じであることがよくありますが、概念があいまいになります。

于 2011-01-06T12:38:47.350 に答える
-1

C#でのテストにはRhinoモックを使用しています。これを使用してモックまたはスタブを生成できます。このフレームワークをご覧になることをお勧めします:http ://www.ayende.com/projects/rhino-mocks.aspx

于 2011-01-05T15:56:24.570 に答える