【问题标题】:Moq WCF service doesn't return valueMoq WCF 服务不返回值
【发布时间】:2014-04-23 10:59:30
【问题描述】:

我的问题是模拟对象不返回它返回 null 的值

我的 MSpec UnitTest 如下

public class With_Fake_Data_Service
{
    protected static Mock<IMProposalWCFService> _fakeDataService;
    protected static FaultContract fault;

    private Establish context = () =>
        {
            _fakeDataService = new Mock<IMProposalWCFService>();

            _fakeDataService.Setup(
                service =>
                service.ReplyToProposal(new ReplyToProposalRequest(Moq.It.IsAny<Proposal>(), Moq.It.IsAny<bool>())))
                            .Returns(new ReplyToProposalResponse( Moq.It.IsAny<bool>(), fault));
            _fakeDataService.Setup(
                service => service.ReplyToProposalEmail(new ReplyToProposalEmailRequest(Moq.It.IsAny<string>(), Moq.It.IsAny<bool>())))
                             .Returns(new ReplyToProposalEmailResponse(Moq.It.IsAny<string>(), fault));

            _fakeDataService.Setup(service => service.GetAllProposals(Moq.It.IsAny<GetAllProposalsRequest>()))
                            .Returns(() => new GetAllProposalsResponse(new List<Proposal>(){new Proposal()}, fault));

            _fakeDataService.Setup(service => service.GetAllProposals(Moq.It.IsAny<GetAllProposalsRequest>())).Verifiable();

        };
}

 public class When_Testing_HomeController_Index : With_Fake_Data_Service
{
    protected static HomeController _homeController;
    protected static IList<Proposal> _proposals;


    private Establish context = () =>
        {
            _homeController = new HomeController(_fakeDataService.Object);
        };

    private Because of = () =>
        {
            var result = _homeController.Index() as ViewResult;
            _proposals = result.Model as IList<Proposal>;
        };



    private It Should_Have_Called_GetAllProposals_At_Least_Once =
        () => _fakeDataService.Verify(service => service.GetAllProposals(Moq.It.IsAny<GetAllProposalsRequest>()), Times.Exactly(1));
}

在实际代码 HomeController 索引方法中,在单元测试上方运行时,我得到的响应为 null

 public HomeController(IMProposalWCFService  service)
    {
        _service = service;
    }

    public ActionResult Index()
    {
        var response = _service.GetAllProposals(new GetAllProposalsRequest());

        if (response.fault == null)    /*Right Here reponse is null when running unit test*/
        {
            var proposals = response.GetAllProposalsResult;
        }


        ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

        return View();
    }

为什么我没有得到非空响应,换句话说,为什么我没有得到

new GetAllProposalsResponse(new List(){new Proposal()}, fault)

请帮忙

【问题讨论】:

    标签: moq mspec


    【解决方案1】:

    发现问题

        public class With_Fake_Data_Service
    {
        protected static Mock<IMProposalWCFService> _fakeDataService;
        protected static FaultContract fault;
    
        private Establish context = () =>
            {
                _fakeDataService = new Mock<IMProposalWCFService>();
    
                _fakeDataService.Setup(
                    service =>
                    service.ReplyToProposal(new ReplyToProposalRequest(Moq.It.IsAny<Proposal>(), Moq.It.IsAny<bool>())))
                                .Returns(new ReplyToProposalResponse( Moq.It.IsAny<bool>(), fault));
                _fakeDataService.Setup(
                    service => service.ReplyToProposalEmail(new ReplyToProposalEmailRequest(Moq.It.IsAny<string>(), Moq.It.IsAny<bool>())))
                                 .Returns(new ReplyToProposalEmailResponse(Moq.It.IsAny<string>(), fault));
    
                _fakeDataService.Setup(service => service.GetAllProposals(Moq.It.IsAny<GetAllProposalsRequest>()))
                                .Returns(() => new GetAllProposalsResponse(new List<Proposal>(){new Proposal()}, fault)).Verifiable();
    
            };
    }
    

    【讨论】:

    • 我推荐Machine.Fakes。它使您的代码更具可读性和简洁性,并为您提供了减少重复的更好方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多