我花了几天时间编写测试,然后不得不在最后一刻添加一个属性来解决我在编写测试时发现的一个问题。自从添加该属性以来,我一直试图让模拟框架发挥作用。
这是我的代码。
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 语法是新的热点,但我有一个完整的大型测试,但为此我不想回去重写。
当代码执行到达“播放”的结束“}”时,我得到了这个异常:
期望违规异常
TiersCalculationContainer.get_Round(); 预期 #1,实际 #0。
在调试测试时,属性“Round”被正确读取并返回我为它模拟的值,所以我知道它被调用了。
我在网上找不到任何关于此的信息。在 Rhino 模拟中似乎有大约 100 种模拟属性的方法。他们都没有工作,这真的令人沮丧。
我也尝试过嘲笑所有这些方式(以及更多)
_mockTiersHelper.Expect(b => b.Round).Return(round);
Expect.Call(_mockTiersHelper.Round).PropertyBehavior();
_mockTiersHelper.Round = round;