0


Je suis très novice dans le domaine des tests unitaires en ce qui concerne les bases de données et en particulier le framework d'entité et je suis maintenant bloqué. J'utilise NUnit pour tester et simuler les entités utilisées et je travaille en utilisant un référentiel générique. Mon cadre de l'entité dispose d'un ensemble complet de classes POCO et le bit je teste actuellement ressemble à ceci:Entity Framework 4 Test et simulation d'unités

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 est un objet de test de la campagne POCO. La méthode « d'abord » dans le IRepository se présente comme suit:

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

L'erreur que je reçois de Nunit est

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

Il revient à dire qu'il devient ce qu'il attend, mais est-ce qu'il lance une erreur? Peut-être que ma compréhension de tout cela est erronée, je veux juste tester la recherche d'une campagne basée sur sa clé et le projet auquel elle est liée. La méthode GetCampaigns effectue une recherche dans le référentiel qui lui est envoyé pour une campagne contenant ces deux éléments. Est-ce que quelqu'un peut me signaler ce que je fais mal? Merci d'avance.

Répondre

1

Si je comprends bien votre code, ici

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

vous configurez votre objet fantaisie pour retourner une fonction qui ne soit pas identique à votre testCampaign.

Assert.AreEqual() tests pour l'égalité stricte. testCampaign et campaign sont du même type et ont le même contenu, mais font référence à différents objets.

Quel cadre de moquerie utilisez-vous? Cela me semble assez compliqué et déroutant. Pour commencer je recommanderais quelque chose comme Moq

+0

Salut merci pour votre réponse, je vais examiner cela et revenir vers vous. J'utilise le framework de simulation NUnit.Mocks. J'ai regardé Moq, mais je ne pouvais pas la comprendre aussi facilement, peut-être que je devrais essayer à nouveau. – Chiefy

+0

Une fois que vous l'obtenez, c'est vraiment facile. Jetez un oeil à cette introduction à Moq: http://www.dimecasts.net/Casts/CastDetails/8 –

+0

Merci Dennis, a également trouvé un bon post sur http://stackoverflow.com/questions/5769414/cannot-seem -à-moq-ef-codefirst-4-1-help-anyone. Il s'avère que la recherche de "EF" apporte plus de résultats que "Entity Framework". Utilisera Moq à la place. – Chiefy