2009-12-09 7 views
0

J'ai le test suivant en utilisant NMock qui échoue. Il fonctionnait lorsque le résultat de l'appel de service était passé à la vue, mais il échoue maintenant puisque les résultats sont convertis en dto.NMock Problème avec les listes

Je pense que cela pourrait signifier que je dois créer un matcher personnalisé, mais je ne suis pas sûr. Quelqu'un a-t-il une idée?

Message d'erreur:

attendu: 1 fois: projectView.SetProjects (égal) [appelé 0 fois] .

code:

public void LoadProjectsTest() 
    { 
     IList<ProjectServiceGetProjectsResponse> expectedGetProjectsResponse = new List<ProjectServiceGetProjectsResponse>(); 
     expectedGetProjectsResponse.Add(new ProjectServiceGetProjectsResponse() { Id = 1, Name = "Project 1", RefNo = "001", Complete = false, Dropped = false }); 
     expectedGetProjectsResponse.Add(new ProjectServiceGetProjectsResponse() { Id = 2, Name = "Project 2", RefNo = "002", Complete = true, Dropped = false }); 
     expectedGetProjectsResponse.Add(new ProjectServiceGetProjectsResponse() { Id = 3, Name = "Project 3", RefNo = "003", Complete = false, Dropped = true }); 

     IList<ProjectPresentationDto> expectedSetProjectsRequest = new List<ProjectPresentationDto>(); 
     expectedSetProjectsRequest.Add(new ProjectPresentationDto(expectedGetProjectsResponse[0])); 
     expectedSetProjectsRequest.Add(new ProjectPresentationDto(expectedGetProjectsResponse[1])); 
     expectedSetProjectsRequest.Add(new ProjectPresentationDto(expectedGetProjectsResponse[2])); 

     ProjectPresenter_Accessor target = new ProjectPresenter_Accessor(this.mockView, 
                     this.mockProjectService); 

     Expect.Once.On(this.mockProjectService).Method("GetProjects").Will(Return.Value(expectedGetProjectsResponse)); 
     Expect.Once.On(this.mockView).Method("SetProjects").With(expectedSetProjectsRequest); 

     target.LoadProjects(); 

     this.mock.VerifyAllExpectationsHaveBeenMet(); 

    } 

Répondre

2

Vous l'avez - vous devez créer un matcher personnalisé et une classe d'usine statique, comme décrit dans la section « Matchers clients dans NMock 2.0 » du NMock 2.0 advanced topics documentation.

Par défaut, NMock utilise Equals pour correspondre aux attentes des arguments passés (dans votre cas, pour voir si LoadProjects ensembles mockView.Projects-expectedSetProjectsRequest ou non).

L'implémentation List<T>.Equals (héritée de Object) est juste checks whether the two variables reference the same object, et dans ce cas, ce n'est clairement pas le cas. (Il ressemble à la méthode LoadProjects créant une nouvelle instance de liste DTO dans le processus de transformation des résultats d'accesseur en DTO.)

Vous devez dire à NMock ce qu'il faut faire au lieu de vérifier l'égalité de référence. Heureusement, la coutume ListMatcher (et la classe IsList correspondante) de la documentation NMock que j'ai liée ci-dessus peut faire l'affaire tout seul. Si ProjectPresentationDto.Equals vérifie l'égalité des valeurs, vous pouvez utiliser cette classe d'exemple telle quelle. Sinon, vous devrez le personnaliser pour définir l'égalité pour vos DTO.

+0

Merci qui a travaillé un régal. James :-) – m0gb0y74

+0

Le lien ci-dessus NMock 2.0 documentation des sujets avancés (http://www.nmock.org/advanced.html) est cassé. Le nouveau lien vers la documentation est http://nmock.sourceforge.net/advanced.html. Merci beaucoup pour la réponse – inlokesh

Questions connexes