2012-08-31 157 views
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。

在調試測試屬性「圓」被正確讀取和retursn我嘲笑它的價值,所以我知道它被稱爲。

我不能在網上找到有關這方面的消息。似乎有大約100種方法來嘲諷Rhino mock中的一個房產。他們都沒有工作,這是非常令人沮喪的。

我也曾嘗試嘲諷所有的這些方式以及(及以上)

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

我認爲這個答案可能是這是一個錯誤。我拋棄了犀牛並回到了Moq。 10分鐘,我起身跑步。現在我的測試通過了。謝謝Moq! – omatase

回答

0

我認爲這個問題的答案可能是,這是一個錯誤。我拋棄了犀牛並回到了Moq。 10分鐘,我起身跑步。現在我的測試通過了。謝謝Moq!

0

這是一個很大的期待進行一次檢查,我會建議分開,然後測試這些對象的行爲只測試他們在集成點上被正確調用。

除此之外,我認爲你的問題是一個邏輯問題,不是語法的問題,如果你是根據文檔設置了模擬,卻得到了意外的行爲在你的代碼或測試它的錯誤。

+0

這個測試旨在更多的是功能測試和單元測試之間的交叉。這絕對不是一個單元測試,儘管它正是我所需要的。這個應用程序是一個獨立模式的複雜組合,它們以非常依賴的方式一起工作。如果沒有像這樣的測試,無論我是否實際包括每個鉤子或呼叫都不可能確定沒有成品可用,但我離題了。問題仍然存在,嘲笑這個屬性根本不工作。如果您有任何關於爲什麼讚賞的信息,這可能是Rhino的一個bug。 – omatase