首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表的NMock问题

列表的NMock问题
EN

Stack Overflow用户
提问于 2009-12-10 00:03:06
回答 1查看 1.6K关注 0票数 0

我使用NMock进行了以下测试,但失败了。当服务调用的结果被传递给视图时,它可以工作,但现在它失败了,因为结果被转换为dto。

我想这可能意味着我需要创建一个自定义匹配器,但我不确定。有谁有什么想法吗?

错误消息:

代码语言:javascript
复制
Test method Dgc.Cpo.RM.UI.Presentation.Test.ProjectPresenterTest.LoadProjectsTest threw exception:  NMock2.Internal.ExpectationException: unexpected invocation of projectView.SetProjects(<System.Collections.Generic.List`1[Dgc.Cpo.ResourceManagement.UI.Presentation.ProjectPresentationDto]>)

预期:1次:projectView.SetProjects(等于)调用0次。

代码:

代码语言:javascript
复制
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();

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-10 00:35:15

您已经了解了-您需要创建一个自定义匹配器和一个静态工厂类,如NMock 2.0 advanced topics documentation的“NMock 2.0中的客户匹配器”部分所述。

默认情况下,NMock使用Equals来匹配传递给default的参数(在您的示例中,查看LoadProjects是否将mockView.Projects设置为expectedSetProjectsRequest )。

List<T>.Equals实现(继承自Object)只是checks whether the two variables reference the same object,在本例中显然不是。(在将get访问器结果转换为DTO的过程中,LoadProjects方法会创建一个新的DTO列表实例。)

你必须告诉NMock做什么,而不是检查引用相等性。幸运的是,我在上面链接的NMock文档中的自定义ListMatcher (和相应的IsList类)可以独立完成此任务。如果ProjectPresentationDto.Equals检查值是否相等,则可以按原样使用该示例类。如果不是,则必须对其进行自定义以定义DTO的相等性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1874880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档