문제

열거 가능한 배열이 있습니다

int meas[] = new double[] {3, 6, 9, 12, 15, 18};

테스트 중인 모의 메서드를 연속적으로 호출할 때마다 해당 배열에서 값을 반환하려고 합니다.

using(_mocks.Record()) {
  Expect.Call(mocked_class.GetValue()).Return(meas); 
}
using(_mocks.Playback()) {
  foreach(var i in meas)
    Assert.AreEqual(i, mocked_class.GetValue();    
}

내가 어떻게 할 수 있는지 아는 사람이 있나요?

도움이 되었습니까?

해결책

항상 정적인 가짜 개체가 있지만 이 질문은 코뿔소 모형에 관한 것이므로 제가 할 방법을 알려 드리겠습니다.비결은 카운터로 지역 변수를 생성하고 이를 익명 대리자/람다에서 사용하여 배열의 위치를 ​​추적하는 것입니다.GetValue()가 6번 이상 호출되는 경우는 처리하지 않았습니다.

var meas = new int[] { 3, 6, 9, 12, 15, 18 };
using (mocks.Record())
{
    int forMockMethod = 0;
    SetupResult.For(mocked_class.GetValue()).Do(
        new Func<int>(() => meas[forMockMethod++])
        );
}

using(mocks.Playback())
{
    foreach (var i in meas)
        Assert.AreEqual(i, mocked_class.GetValue());
}

다른 팁

기능이 GetValue()가 각 배열 요소를 연속적으로 반환하는 경우 다음과 같은 여러 기대치를 설정할 수 있어야 합니다.

using(_mocks.Record()) {
  Expect.Call(mocked_class.GetValue()).Return(3); 
  Expect.Call(mocked_class.GetValue()).Return(6); 
  Expect.Call(mocked_class.GetValue()).Return(9); 
  Expect.Call(mocked_class.GetValue()).Return(12); 
  Expect.Call(mocked_class.GetValue()).Return(15); 
  Expect.Call(mocked_class.GetValue()).Return(18); 
}
using(_mocks.Playback()) {
  foreach(var i in meas)
    Assert.AreEqual(i, mocked_class.GetValue();    
}

모의 저장소는 기대치를 순서대로 적용합니다.

여기서 모의를 해야 하는 이유가 무엇이든...
안 그러면 가짜 수업을 듣게 될 텐데..훨씬 간단하고이를 수행하는 방법을 알고 있습니다. :) Mock Framework가 이러한 종류의 사용자 지정 동작을 제공하는지 모르겠습니다.

IMHO, Yield가 이를 처리할 것입니다.링크.

다음과 같은 것 :

get_next() {
  foreach( float x in meas ) {
    yield x;
  }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top