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;
}
任何人都知道,如果有這樣的犀牛嘲笑一些神奇? *我懷疑有必要使這種方法是通用的,但如果不是,甚至更好。