私の最新の災害は、嘲笑に悩まされています。私は実際に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
がIEnumerable<IAnimal>
として公開し、むしろ、動物を保持することができるZoo
をテストするつもりはないよ、とyield return
ことにも慣れてきています。
振り返ってみると、これは** TERRIBLE **の質問です。閉じる投票しようとする –