犀牛嘲笑为什么我不能嘲笑财产?

时间:2012-08-31 03:31:45

标签: c# unit-testing rhino-mocks

我花了几天时间编写测试,然后必须在最后一刻添加一个属性来修复我在编写测试时发现的一个问题。由于添加了该属性,我只是试图让模拟框架运行。

这是我的代码。

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”并重新调整我为它模拟的值,因此我知道它已被调用。

我在网上找不到任何关于此的信息。在犀牛嘲笑中似乎有大约100种嘲弄房产的方法。他们都没有工作,这真的令人沮丧。

我也试过嘲笑所有这些方式(以及更多)

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

2 个答案:

答案 0 :(得分:0)

这是对一个测试的很多期望,我建议分别测试每个对象的行为,然后仅测试它们在集成点被正确调用。

除此之外,我认为您的问题是一个逻辑问题,而不是语法问题,如果您根据文档设置模拟并获得意外行为,则会导致代码或测试中出现错误。

答案 1 :(得分:0)

我认为对此的答案可能是这是一个错误。我抛弃了犀牛并回到了Moq。 10分钟,我开始跑步了。现在我的测试通过。谢谢Moq!