gpt4 book ai didi

rhino-mocks - 是否可以模拟已经存在的对象的一部分?

转载 作者:行者123 更新时间:2023-12-02 04:18:29 25 4
gpt4 key购买 nike

有没有一种方法可以基于现有对象创建模拟对象?例如,在对ASP.NET MVC应用程序进行单元测试时,我经常遇到模拟存储库方法(例如GetAll)的问题。通常我想让这个方法返回一些测试数据,像这样:

    private List<Country> CreateCountries()
{
return new List<Country> {
new Country("Australia", "AU", "AUS"),
new Country("Canada", "CA", "CAN"),
...
};
}

我的实体对象都是从具有Id属性的 PersistedEntity基类派生的,但是只能由NHibernate设置,因此当我从头开始创建这些对象时,它们的Id =0。这对于单元测试是有问题的,因为它们使 Controller 不切实际所有ID均设为0的实体列表。

我真的很想能够通过执行以下操作来设置这些对象的ID
new Country("United States", "US", "USA").SetID<Country>(3); *

其中 SetIDPersistedEntity的扩展方法:
    public static T SetID<T>(this T entity, int id) where T : PersistedEntity
{
var mocks = Mocker.Current;

// Some kind of magic happens here that creates a mocked version of
// entity (entity2), which has the same values as the original entity
// object but allows us to set up new expectations on it like...

Expect.Call(entity2.Id).Return(id);

return entity2;
}

有人知道Rhino Mocks中是否有类似的魔术?

*我怀疑有必要使此方法通用,但如果没有,甚至更好。

最佳答案

如果我正确理解了您的问题,则应该可以像下面这样进行操作:

var country = MockRepository.GenerateMock<Country>("Australia", "AU", "AUS");

...

country.Stub(c => c.Id).return(5); // whatever arbitrary id you want to give it

...

return new List<Country> { country, ... };

我在这里假设 Country没有密封,即RhinoMocks能够生成该类的模拟。

关于rhino-mocks - 是否可以模拟已经存在的对象的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1202193/

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