2012-08-31 2 views
1

며칠 동안 테스트를 작성한 다음 마지막 테스트에서 작성한 문제 중 하나를 해결하기 위해 마지막 순간에 속성을 추가해야했습니다. 그 속성을 추가 한 이후로 나는 조롱하는 프레임 워크를 작동 시키려고 노력했습니다.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 구문은 새로운 섹시한 레이저 알고 있지만 완전한하지만위한 대규모 테스트를하고 난 돌아가서 다시하고 싶지 않아요. 코드 실행 I이 예외 얻을 사용하여 "재생"의 닫힘 "}"에 도달

:

ExpectationViolationException

TiersCalculationContainer.get_Round을(); 예상 # 1, 실제 # 0.

테스트를 디버깅 할 때 "Round"속성이 올바르게 읽히고 내가 호출 한 것을 알기에 값을 조롱했습니다.

이 문제에 관해 온라인으로 어떤 정보도 찾을 수 없습니다. Rhino mock에서 부동산을 조롱하는 방법은 약 100 가지가 될 것 같습니다. 그들 중 누구도 일하고 ​​있지 않으며 이것은 정말로 실망하게됩니다.

나는 이러한 모든 방법뿐만 아니라 (더)를 조롱 시도

하나 개의 테스트에 대한 기대를 많이입니다
_mockTiersHelper.Expect(b => b.Round).Return(round); 
Expect.Call(_mockTiersHelper.Round).PropertyBehavior(); 
_mockTiersHelper.Round = round; 
+0

나는 이것이 버그 일 수 있다고 생각합니다. 나는 Rhino를 버리고 Moq로 돌아갔습니다. 10 분 그리고 나는 일어나 달리고 있었다. 이제 내 검사가 끝났어. 고마워요! – omatase

답변

0

나는 이것에 대한 대답이 버그라고 생각한다. 나는 Rhino를 버리고 Moq로 돌아갔습니다. 10 분 그리고 나는 일어나 달리고 있었다. 이제 내 검사가 끝났어. 고마워요!

0

, 나는 따로 후 다음 각 개체의 동작을 테스트하는 것이 좋습니다 통합 지점에서 올바르게 호출된다는 것만 테스트합니다.

당신이 문서에 따라 모의를 설정하고 예기치 않은 동작을 코드 또는 테스트의 버그가 발생시키는 경우 문제는 논리 문제가 아니라 구문 문제라고 생각합니다.

+0

이 테스트는 기능 테스트와 단위 테스트 간의 교차점을 더욱 넓게하기위한 것입니다. 그것이 정확히 내가 필요로하는 것은 분명히 단위 테스트가 아닙니다. 이 응용 프로그램은 매우 독립적 인 방식으로 서로 독립적으로 작동하는 복잡한 패턴입니다. 이런 테스트를 거치지 않고도 실제로 모든 후크 나 호출을 포함했는지 여부는 완성 된 제품을 사용할 수없는 상태로 결정하는 것은 불가능하지만 나는 벗어납니다. 여전히이 부동산을 조롱하는 것이 전혀 효과가 없다는 문제가 남아 있습니다. 이유가 무엇인지에 대한 통찰력이 있다면 아마 Rhino 버그 일 것입니다. – omatase