1

テストの作成に数日を費やした後、テストの作成中に見つかった問題の 1 つを修正するために、最後の最後にプロパティを追加する必要がありました。そのプロパティを追加して以来、モッキング フレームワークを機能させようとして立ち往生してきました。

これが私のコードです。

using (_mockRepository.Record())
        {
            _mockBattleDao.Expect(b => b.GetUnprocessedActions(gameId, round)).Return(roundResolvingItems);
            _mockDao.Expect(b => b.GetMidGameCharacterStats(gameId, round)).Return(midGameCharacterStats);
            _mockBattleDao.Expect(b => b.GetAmbientCharacterBuffs(_mockTiersHelper, gameId, round)).Return(new List<Buff>());
            _mockBattleDao.Expect(b => b.GetActiveTriggerBuffs(_mockTiersHelper, gameId, round)).Return(triggerBuffs);
            _mockBattleDao.Expect(b => b.GetActiveAmbientBuffs(_mockTiersHelper, gameId, round)).Return(new List<Buff>());
            _mockDao.Expect(b => b.GetGame(gameId)).Return(new Common.Entities.Game { CompletionType = "single party down" });
            _mockDao.Expect(b => b.GetAbilityById(1337)).Return(ability).Repeat.Times(3);
            _mockDao.Expect(b => b.GetAbilityById(1727)).Return(attackAbility).Repeat.Times(4);
            _mockTiersHelper.Expect(b => b.AddStatistic(Arg<StatAndCount>.Is.Anything)).Repeat.Times(3);
            SetupResult.For(_mockTiersHelper.Round).Return(round);
        }

        TiersCalculationContainer container;

        using (_mockRepository.Playback())
        {
            container = engine.ProcessTiers();
        }

AAA 構文が新しい話題であることはわかっていますが、完了した大規模なテストがありますが、このために戻って書き直したくありません。

コード実行が「再生」の最後の「}」に到達すると、次の例外が発生します。

ExpectationViolationException

TiersCalculationContainer.get_Round(); 予想 #1、実際の #0。

テストをデバッグすると、プロパティ「Round」が正しく読み取られ、モックした値が返されるので、それが呼び出されたことがわかります。

これについてオンラインで情報を見つけることができません。Rhino モックでプロパティをモックする方法は約 100 あるようです。それらのどれも機能しておらず、これは本当にイライラしています。

私はまた、これらすべての方法(およびそれ以上)をモックしようとしました

_mockTiersHelper.Expect(b => b.Round).Return(round);
Expect.Call(_mockTiersHelper.Round).PropertyBehavior();
_mockTiersHelper.Round = round;
4

2 に答える 2

0

これに対する答えは、これがバグであるということかもしれないと思います。Rhinoを捨てて、Moqに戻りました。10分で私は稼働していました。今、私のテストは合格です。Moqありがとう!

于 2012-09-14T15:43:04.333 に答える
0

これは 1 つのテストに対する多くの期待値です。これらの各オブジェクトの動作を個別にテストしてから、それらが統合ポイントで適切に呼び出されることだけをテストすることをお勧めします。

それとは別に、ドキュメントに従ってモックを設定し、コードまたはテストのバグである予期しない動作が発生した場合、問題は構文の問題ではなくロジックの問題だと思います。

于 2012-08-31T04:37:44.753 に答える