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

标签 c# unit-testing rhino-mocks

与昨天的question相关。我实现了 solution提议者Mehrdad 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创造的动物类型是一个动物代理,我要求使用 Animal,这打破了我的测试。关于如何纠正这种情况有什么建议吗?

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

最佳答案

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

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/

相关文章:

c# - 如何在 asp.net mvc 4 的服务器上缓存数据?

c# - 将 IdentityUserClaim 导航添加到 IdentityUser<int>

c# - 当存储库包含您最重要的代码时编写单元测试

c# - 犀牛模拟 : How to verify that a constructor was called

c# - RhinoMock 3.6.1 报错方法未调用?

c# - C#部署的安装问题

c# - 如何最好地表示 'variant' 枚举?

python - Python 单元测试套件

c# - 在单元测试情况下检查 DefaultHttpContext 主体

c# - 我如何在 Rhino Mocks 中 stub Func<T,TResult>?