2012-08-31 156 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