わかりました。Rhino Mocks の新しい AAA 構文について多くの混乱があったことは承知していますが、正直に言うと、これまで見てきたことから、私は気に入っています。読みやすくなり、キーストロークを節約できます。
基本的に、私は基本ListController
的にいくつかのリストを担当する a をテストしています:)最終的にDALになるインターフェースを作成しましたが、これはもちろん今のところスタブ化されています.
次のコードがありました。
(manager
はテスト対象のシステム、data
はスタブ化されたデータ インターフェイス)
[Fact]
public void list_count_queries_data()
{
data.Expect(x => x.ListCount(1));
manager.ListCount();
data.VerifyAllExpectations();
}
このテストの主な目的は、マネージャーが実際に DAL をクエリしていることを確認することです。DAL は実際には存在しないため、「実際の」値は返されないことに注意してください。
ただし、次のような戻り値を持つように期待を変更する必要があるため、これは失敗しています。
data.Expect(x => x.ListCount(1)).Return(1);
その後、これは正常に実行され、テストはパスしますが、この時点で私を混乱させているのは、戻り値が何も意味しないことです。100、50、42 などに変更でき、テストは常にパスしますか?
テストは明示的である必要があり、期待される条件が正しく満たされていない場合は完全に失敗する必要があるため、これは私を緊張させますか?
テストを次のように変更すると (「1」は、カウントがリンクされていると予想される ID です):
[Fact]
public void list_count_queries_data()
{
manager.ListCount();
data.AssertWasCalled(x => x.ListCount(1));
}
それはすべて問題なく合格し、頭のテストを に切り替えると、AssertWasNotCalled
期待どおりに失敗します..また、読みやすく、テスト対象がより明確になり、最も重要なことに、期待どおりに合格および不合格になると思います!
では、最初のコード例で何か不足していますか? スタブでアサーションを作成することについてどう思いますか? (ここで興味深い議論がありました。私は個人的にこの反応が好きでした。