3
有没有办法根据已经存在的对象创建一个模拟对象?例如,当单元测试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。这对于单元测试是有问题的,因为它们给控制器提供了不切实际的实体列表,其所有Id的设置为0.
我真的很想能够设置ID通过做类似于这些东西
new Country("United States", "US", "USA").SetID<Country>(3); *
凡SetID
将是对PersistedEntity
扩展方法:
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;
}
任何人都知道,如果有这样的犀牛嘲笑一些神奇? *我怀疑有必要使这种方法是通用的,但如果不是,甚至更好。