Entity Framework 4 модульное тестирование и макетирование - PullRequest
0 голосов
/ 19 августа 2011

Я очень новичок в модульном тестировании, когда речь идет о базах данных и особенно об объектах, и теперь я застрял.Я использую NUnit для тестирования и макета используемых объектов и работаю с использованием универсального репозитория.Моя инфраструктура сущностей имеет полный набор классов POCO, и бит, который я сейчас тестирую, выглядит следующим образом:

    campaignRepoMock = new DynamicMock(typeof(IRepository<Campaign>));
    campaignRepoMock.ExpectAndReturn("First", testCampaign, new Func<Campaign, bool>(c => c.CampaignID == testCampaign.CampaignID));
    CampaignService campaignService = new CampaignService((IRepository<Campaign>)campaignRepoMock.MockInstance);
    Campaign campaign = campaignService.GetCampaign(testCampaign.Key, ProjectId);
    Assert.AreEqual(testCampaign, campaign);

testCampaign - это отдельный тестовый объект кампании POCO.Метод «Первый» в IRepository выглядит следующим образом:

    public T First(Func<T, bool> predicate)
    {
        return _objectSet.FirstOrDefault<T>(predicate);
    }

Ошибка, которую я получаю от Nunit:

CampaignServiceTests.Campaign_Get_Campaign:   
  Expected: <System.Func`2[Campaign,System.Boolean]>  
  But was: <System.Func`2[Campaign,System.Boolean]>

Так что в основном говорится, что он получает то, что оножидает, но его выбрасывает ошибку?Возможно, мое понимание этого неверно, я просто хочу проверить поиск Кампании на основе ее ключа и проекта, с которым она связана.Метод GetCampaigns просто ищет в репозитории, отправленном в него, кампанию, в которой есть оба этих элемента.

Может кто-нибудь указать мне, что я делаю неправильно?Заранее спасибо.

1 Ответ

1 голос
/ 19 августа 2011

Если я понимаю ваш код, здесь

campaignRepoMock.ExpectAndReturn("First", testCampaign, new Func<Campaign, bool>(c => c.CampaignID == testCampaign.CampaignID));

вы настраиваете свой фиктивный объект так, чтобы он возвращал функцию, которая не идентична вашей testCampaign.

Assert.AreEqual() тесты длястрогое равенство.testCampaign и campaign относятся к одному и тому же типу и имеют одинаковое содержание, но ссылаются на разные объекты.

Какую систему моделирования вы используете?Выглядит довольно сложно и запутанно для меня.Для начала я бы порекомендовал что-то вроде Moq

...