我正在为Country模型对象创建一些单元测试。这部分是由数据库表中的Linq-to-SQL机制生成的,部分由我控制。在检查有效时,此类使用CountryRepository进行某些检查;特别是该名称的国家/地区尚未存在于数据库中。
由于在单元测试期间不应该在数据库中使用自己,我创建了一个模拟存储库来提供假装数据,并修改模型类,如下所示: -
public partial class Country
{
private ICountryRepository country_repository;
public Country(ICountryRepository passed_country_repository)
{
country_repository = passed_country_repository;
}
//...etc
然后我可以在测试中构造这个对象: -
Country test_country = new Country(new MockCountryRepository())
{
// code in here
};
并且测试运行令人满意。
问题出现在实际的实际使用中;我必须为存储库的每个用法添加前缀: -
if (country_repository == null)
{
country_repository = new CountryRepository();
}
如果调用零参数构造函数,则取消设置country_repository
变量。我最初的宣言是: -
private ICountryRepository country_repository = new CountryRepository();
但是,无论使用哪种构造函数,都会尝试数据库连接。我无法更改零参数构造函数以将country_repository
设置为任何内容,因为它是自动生成的,并且我的更改可能会在零通知时消失。
有没有更好的方法将MockCountryRepository放入模型对象?或者我在某处错过了这一点,如果是这样,我该怎么办?