약간의 .net 2.0 프로젝트를 개발 중입니다. IEnumerator를 사용하는 클래스의 메서드를 테스트해야하는 시점에 이릅니다. 나는 코뿔소 모의 객체를 사용하는 것을 배웠다 며칠 전 나는이 내가 실행하려고하면 그것을 사용하기 때문에, 그것은 멈추지 않을 것Rhino Mocks : IEnumerator 스터 빙 <T>
public void Load(IEnumerator<string> pProcessCommmandNames)
{
while (pProcessCommmandNames.MoveNext())
{
string bCommandName= pProcessCommmandNames.Current;
... doing something with the string...
}
}
방법 코드를입니다
[Test]
public void GetEnumerator_ValidList_ReverseIteration()
{
MockRepository mMocks = new MockRepository();
IEnumerator<string> mStubEnumerator = mMocks.Stub<IEnumerator<string>>();
IProcessCommandFactory mStubFactory = mMocks.Stub<IProcessCommandFactory>();
using (mMocks.Record())
{
mStubEnumerator.MoveNext();
LastCall.Return(true);
Expect.Call(mStubEnumerator.Current);
LastCall.Return("Organization");
mStubEnumerator.MoveNext();
LastCall.Return(true);
Expect.Call(mStubEnumerator.Current);
LastCall.Return("Algorithm");
mStubEnumerator.MoveNext();
LastCall.Return(true);
Expect.Call(mStubEnumerator.Current);
LastCall.Return("ProcessTemplate");
mStubEnumerator.MoveNext();
LastCall.Return(false);
}
DeleteStrategy mStrategy= new DeleteStrategy( mStubFactory,
"S1",
true);
mStrategy.Load(mStubEnumerator);
... meaningless code...
}
다음 테스트를 썼다 첫 번째 MoveNext()가 값을 주입하고 루프를 시작합니다.
내가 잘못하고있는 것을 누군가가 알아낼 수 있다면 감사하겠습니다.
덕분에 난 당신이 스텁 mStubEnumerator
을 Load()
전달하는보고있는 무슨에서
테스트 할 대상은 무엇입니까? MoveNext 메서드가 호출됩니다. "... meangingless code ..."는이 메소드의 중요한 부분이며 단위 테스트를 작성하려는 것입니다. – PatrickSteele
미안하지만, 나는 서둘러 있었고, 당신이 말했듯이, 나는 중요한 선을 그었다. 그러나 거의 동일합니다. 내 메서드는 열거 자에서 문자열을 가져 와서 클래스를 인스턴스화하는 데 사용하지만 IEnumerator에 대해 원하는 반복 동작을 스텁 할 수없는 것 같습니다 – Watt