[英]Rhino Mocks Why Can't I Mock a Property?
我花了幾天時間編寫測試,然后不得不在最后一刻添加一個屬性,以解決我在編寫測試時發現的問題之一。 自添加該屬性以來,我一直在嘗試使模擬框架起作用。
這是我的代碼。
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語法是新的熱點,但是我有一個完整的大型測試,但是為此,我不想返回並重寫。
當代碼執行到達使用“ Playback”的結尾“}”時,出現以下異常:
ExpectationViolationException
TiersCalculationContainer.get_Round(); 預期#1,實際#0。
在調試測試時,正確讀取了屬性“ Round”並破壞了我為其模擬的值,因此我知道它被調用了。
我在網上找不到有關此的任何信息。 在Rhino模擬中,大約有100種模擬屬性的方法。 他們都沒有工作,這真令人沮喪。
我也嘗試過模擬所有這些方式(還有更多)
_mockTiersHelper.Expect(b => b.Round).Return(round);
Expect.Call(_mockTiersHelper.Round).PropertyBehavior();
_mockTiersHelper.Round = round;
對一個測試有很多期望,我建議分別測試每個對象的行為,然后僅測試在集成點是否正確調用了它們。
除此之外,我認為您的問題是邏輯問題,而不是語法問題,如果您要根據文檔設置模擬並獲得意外行為,則這是代碼或測試中的錯誤。
我認為答案可能是錯誤。 我拋棄了犀牛,回到了起訂量。 10分鍾,我就開始跑步了。 現在我的測試通過了。 謝謝你,定單!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.