Поскольку вы не можете использовать это из-за того, что компилятору нужно знать тип заранее:
zoo.AddAnimal(animal);
IList<Animal> animals= zoo.GetAnimalsOfType<typeof(animal)>();
Assert.That(animals[0], Is.EqualTo(animal));
Я думаю, вам придется бросить свой собственный макет:
class MockAnimal : Animal
{
}
zoo.AddAnimal(new MockAnimal());
IList<Animal> animals= zoo.GetAnimalsOfType<MockAnimal>();
Assert.That(animals[0], Is.EqualTo(animal));
также вы не хотите проверить, что возвращаемый экземпляр - это не тот экземпляр, который был добавлен, а просто равен? (не уверен в синтаксисе, все же вы Asset.AreSame () здесь)
Assert.That(animals[0], Is.SameAs(animal));
Не удивительно, что другие этого не делают, так как вы хотите, чтобы GetAnimalsOfType
возвращал только животных того типа, не так ли, а не типы, полученные из этого? Если вы сделали это:
class Tiger : Animal
{
}
zoo.AddAnimal(new Tiger());
IList<Animal> animals= zoo.GetAnimalsOfType<Animal>();
ожидаете ли вы, что это пройдет:
Assert.AreEqual(1, animals.Count);
Полагаю, нет. Если вы хотите сделать то, что вы обрисовали в общих чертах, я думаю, вам придется создать настоящее животное, а не издевательство.