如何将模拟存储库放入模型对象中

时间:2018-01-24 12:34:20

标签: c# asp.net-mvc unit-testing

我正在为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放入模型对象?或者我在某处错过了这一点,如果是这样,我该怎么办?

0 个答案:

没有答案