내 최근의 재앙이 조롱을 당하면서 실제로 모의 객체 IEnumerable<T>
에 결과를 밀어 넣을 필요가 없습니다. 여기 IEnumerable <T>을 어떻게 조롱합니까?
IEnumerable<T>
의 데모, 실제로 좋은 상호 작용을 기반 테스트!) : 나는 다음과 같은 이유로 작업을 얻었는지
using System;
using System.Collections.Generic;
using Rhino.Mocks;
using MbUnit.Framework;
[TestFixture]
public class ZooTest
{
[Test]
public void ZooCagesAnimals()
{
MockRepository mockery = new MockRepository();
IZoo zoo = new Zoo();
// This is the part that feels wrong to create.
IList<IAnimal> mockResults = mockery.DynamicMock<IList<IAnimal>>();
IAnimal mockLion = mockery.DynamicMock<IAnimal>();
IAnimal mockRhino = mockery.DynamicMock<IAnimal>();
using (mockery.Record())
{
Expect.Call(zoo.Animals)
.Return(mockResults)
.Repeat.Once();
}
using (mockery.Playback())
{
zoo.CageThe(mockLion);
zoo.CageThe(mockRhino);
Assert.AreEqual(mockResults, new List<IAnimal>(zoo.Animals));
}
}
}
public class Zoo : IZoo
{
private IList<IAnimal> animals = new List<IAnimal>();
public void CageThe(IAnimal animal)
{
animals.Add(animal);
}
public IEnumerable<IAnimal> Animals
{
get
{
foreach(IAnimal animal in animals)
{
yield return animal;
}
}
}
}
public interface IAnimal
{
}
public interface IZoo
{
IEnumerable<IAnimal> Animals { get;}
void CageThe(IAnimal animal);
}
내가 싫어하는 :
IEnumerable<IAnimal>
결과를 사용하면IList<IAnimal>
이됩니다. 왜냐하면이 결과가 힙에 있는지 확인하기 때문입니다.- 결과의 내용 설정 - 잘 알고 있습니다. 하지만 내 주요 요점은
Zoo.Animals
이IEnumerable<IAnimal>
을 반환하고 더 나아가 그 안에yield return
을 사용하고 있음을 테스트하는 것입니다.
더 나은 방법과 간단한 방법에 대한 제안 사항이 있으십니까?
편집 : 나는 IEnumerable<T>
과 내가 사용하는 모든 것의 상호 작용을 테스트하는 최적의 방법을 결정하려고합니다. 나는 Zoo
이 동물을 수용 할 수 있다는 것을 테스트하려하지 않고, Zoo
은 IEnumerable<IAnimal>
으로 표시되며, yield return
도 사용되는 것으로 나타났습니다.
돌이켜 볼 때이 메시지는 ** 끔찍한 ** 질문입니다. 투표를 닫으려고하는 중 –