gpt4 book ai didi

c# - Rhino Mock stub 返回与预期不同的类型并破坏我的单元测试

转载 作者:行者123 更新时间:2023-11-30 22:47:42 24 4
gpt4 key购买 nike

与昨天的question相关.我实现了 solutionMehrdad Afshari 提出但这引起了另一个问题。回顾一下:我有一个包含 Type->IList<Type> 字典的类例如Cat->{cat1, cat2}, Zebra->{zebra1, zebra2}其中 CatZebraAnimal 的子类.现在Mehrdad提出了以下方法来检索某一类型的所有动物:

IList<T> GetAnimalsOfType<T>() where T : Animal {
return dictionary[typeof(T)].OfType<T>().ToList();
}

这有效但破坏了我的单元测试。原因是 Animal 是一个抽象类,所以我使用 Rhino Mocks stub (使用 animal = MockRepository.GenerateStub<Animal>(); )。我对此类的单元测试尝试创建一种新动物,然后查看它是否包含在字典中。

zoo.AddAnimal(animal);  
IList<Animal> animals= zoo.GetAnimalsOfType<Animal>();
Assert.That(animals[0], Is.EqualTo(animal));

不幸的是 Rhino Mocks 创造的动物类型是一个动物代理,我要的是动物,这打破了我的测试。关于如何纠正这种情况有什么建议吗?

更新:感谢大家提供的解决方案。

最佳答案

您可以询问刚刚插入的特定类型。您必须创建一个辅助函数:

T Get<T>(T parameterOnlyToInferTheType)
{
IList<Animal> animals= zoo.GetAnimalsOfType<T>();
return animals[0];
}

animal = MockRepository.GenerateStub<Animal>();
zoo.AddAnimal(animal);
Animal expected = Get(animal);
Assert.That(expected, Is.EqualTo(animal));

看起来还是有点不靠谱,但应该可以。

一般来说,我倾向于避免在类型上键入集合,所以我没有这些问题(例如,我在返回枚举的类上有一个属性,等等)。

关于c# - Rhino Mock stub 返回与预期不同的类型并破坏我的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2145719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com