Rhino 모형:시퀀스에서 숫자를 어떻게 반환합니까?
-
09-06-2019 - |
문제
열거 가능한 배열이 있습니다
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가 이러한 종류의 사용자 지정 동작을 제공하는지 모르겠습니다.
제휴하지 않습니다 StackOverflow