、私は時々、正しく、彼らがテストするためのものの事をテストするために構成されていなかったが、問題があるため、デフォルト(ルース)モックの挙動を発見されなかったテストを見つける:AutoMoqCustomizationでStrict MockBehaviorを使用するにはどうすればよいですか? AutoFixture.AutoMoqパッケージにAutoFixtureを使用して
public interface IService
{
bool IsSomethingTrue(int id);
}
void Main()
{
var fixture = new Fixture()
.Customize(new AutoMoqCustomization());
var service = fixture.Freeze<Mock<IService>>();
Console.WriteLine(service.Object.IsSomethingTrue(1)); // false
}
MockをStrictの動作で作成させたいので、私たちは呼び出す予定のメソッドに対してSetup()
を呼び出す必要があります。私はこのような個々のモックのためにこれを行うことができます。
fixture.Customize<Mock<IService>>(c => c.FromFactory(() => new Mock<IService>(MockBehavior.Strict)));
しかしAutoMoqCustomizationのソースコード(経由コーミング後)と、様々なISpecimenBuilder
と他の実装、私はかなりちょうどすべてを作るための最善の方法へと迷ってしまいましたモックは厳密な動作で初期化されます。フレームワークは非常に柔軟で拡張性が高いと思われるので、これを行う簡単な方法があると確信しています。
感謝。私はそれを動作させることができるかどうかがわかります。厳格なモックについて:モックが本当に「モック」だった場合、あなたのポイントは有効だと思います。残念なことに、私のモックのほとんどは実際に値を返すと予想される*スタブ*の目的に役立ちます。 SUTがスタブから返されたデータに依存していて、スタブを設定していない場合、最良の場合はテストが失敗し、最悪の場合はテストが間違った理由で失敗します。どちらの場合でも、NREがどこから来ているのかを推測するのではなく、どのスタブが設定する必要があるかを示すコード行をすぐに見ることができます。 – StriplingWarrior
@StriplingWarrior http://blog.ploeh.dk/2013/10/23/mocks-for-commands-stubs-for-queries –
私はこの記事の例題がかなり工夫されていることを発見しました.CQSを作成してユーザーオブジェクトを作成して返しますGetUserメソッドに提供されたIDさえも持っていません。それらは、私が典型的にはメソッドに対して行われる変更の種類ではありません。私が定期的に見ている変更は、たとえその記事の最後の正しい例のように書かれていても、単体テストの変更を必要とします。それが起こると、Strict mockのフェイル・ファースト動作は時間を大幅に節約し、さらに重要なことに、私の単体テストがテストしているものをテストしていることを保証するのに役立ちます。 – StriplingWarrior