これはほぼ 2 年前の質問です。しかし、元の質問のコンテキストを見ると、@Anthony は実際にテスト プロジェクトで MSpec を使用したいと考えているようです。
@bitbonk と @mtijn による 2 つの回答は、プロジェクト レベルでこれらを無視してはならない大きな理由を示しています。しかし、これらの2つの回答は、@ Anthonyの当初の意図、つまり彼がMSpecを使用しようとしているということを無視しています。
おわかりのように、MSpec は仕様を定義するために大量のデリゲートとフィールド定義を使用する BDD フレームワークです。多くの場合、割り当てられていないフィールドとデリゲートがあります。これらにより、特に StyleCop やその他の自動化ツールを使用して開発者をチェックしている場合、VS で警告が狂ったように飛び交います。
[Subject(typeof(PostService), "when_calling_Save()"]
class with_a_valid_Post_object
{
It should_save_to_repository;
It should_update_post_counter;
Behaves_like<Normal_Behaviors> a_PostService;
}
発生した警告の数を推測したいですか? 実際には、コードとプロジェクトをかなり前もって仕様化するのはまったく普通のことです。設計を BDD で仕様化するときに、大量の警告に悩まされる必要はありません。MSpec の要点は、構文ノイズが最小限のコンテキストで全体的なストーリーを仕様化することです。警告、それぞれが十数個の仕様を持つ十数個のストーリーを作成した後は、非常にうるさくしてください!
今では、「まだテストはありません。スタブされているだけです。警告によって、実装する必要があることが明らかになります」と言って、警告を正当化しようとしている人がいます。実際には、MSpec は実行時にこれらの「スタブ化された」仕様を別の方法で出力ウィンドウに表示し、テストの合計では「スキップ」と表示され、HTML 出力レポートでも非常に美しいものになっています。言い換えれば、実装されていない仕様があることを警告する必要はありません。ランナーはすでにそれを行っているからです。
もうBehaves_like<T>
ちょっと変です。しかし、これで終わりであることに注意してください。これ以上の実装はありませんBehaves_like<T> behaviors
。MSpec のランナーが (すべてのフィールド デリゲート) を使用して実行するのは、割り当てられていないフィールドです。
ただし、解決策は簡単です。Machine.Specifications プロジェクト専用の MSpec "Specs" テスト プロジェクトの場合、私はしばしばプロジェクトの設定を右クリックし、これらを [抑制] ボックスに追加します。
0169;0649
繰り返しますが、これは MSpec テスト プロジェクト (または、重いデリゲートと割り当てられていないフィールドを使用するため、実際には他の BDD C# フレームワーク) のみを対象としています。通常のプロジェクトでは、これを行うべきではありません。
あるいは、チーム リーダーがテスト プロジェクト用に編集する権利を拒否した場合は、仕様を実装して、MSpec を使用して最初に回避しようとしていたシナキシャル ノイズを追加することができます (チームのせいにします)。 「コンテキスト切り替え」であなたの人生をより困難にするためのリード!)。
[Subject(typeof(PostService), "when_calling_Save()"]
class with_a_valid_Post_object
{
It should_save_to_repository =()=> { };
It should_update_post_counter =()=> { };
Behaves_like<Normal_Behaviors> a_PostService =()=> { };
}
それははるかに醜く、仕様を明らかにしようとしている全体的な BDD ストーリーの焦点から実際に離れてしまいます。言うまでもなく、あなたのすべての仕様は、何も実装されていなくても合格します (ハードフェイルにするためにさらに追加できますがthrow new NotImplementedException()
、真剣に?)。ただし、プロジェクト レベルでそれらを無視したくない場合は、各フィールドを「実装」する方法です。