繁体   English   中英

模拟函数在c#单元测试中不抛出异常

[英]Mock function not throwing exception in c# unit test

这是我的单元测试方法

        [Fact]
        public void DealerSmsStatusTestTest_MustReturnInternalServerErrorIfMockMethodFails()
        {
            //Arrange
            Mock<DBClass.IDealer> mock = new Mock<DBClass.IDealer>();
            var exception = FormatterServices.GetUninitializedObject(typeof(System.Data.SqlClient.SqlException));
            mock.Setup(x => x.GetDealerStatus(new System.Net.Http.HttpRequestMessage()))
                .Throws((System.Data.SqlClient.SqlException)exception);

            DealerSettingController controller = new DealerSettingController(mock.Object);
            
            //Act
            var result = controller.DealerSmsStatus();
   
            //Assert
         /*I will do assertion here*/

        }

这是我的控制器方法

public IHttpActionResult DealerSmsStatus()
        {
            try
            {
                var result = _dealer.GetDealerStatus(Request);
                return Json(new Models.Response(
                            Models.ResponseMessages.Success,
                            result)
                         );
            }
            catch (System.Data.SqlClient.SqlException)
            {
                return InternalServerError();
            }
            catch (System.Exception ex)
            {
                Logger.Error(ex, ex.Message, ex.StackTrace);
                return InternalServerError();
            }

        }

当我调试测试时, GetDealerStatus()方法应该返回SqlException而不是它返回null 在控制器方法var result总是得到null 任何建议都表示赞赏为什么它不起作用。我想通过GetDealerStatus()抛出SqlException 这是调试模式result值图像

在此处输入图片说明

您应该在Setup使用It.IsAny<System.Net.Http.HttpRequestMessage>()而不是new System.Net.Http.HttpRequestMessage() 因为您为System.Net.Http.HttpRequestMessage具体实例配置了您的方法,所以在测试中它不一样。

这可能是匹配器x.GetDealerStatus(new System.Net.Http.HttpRequestMessage())

new System.Net.Http.HttpRequestMessage()创建一个HttpRequestMessage的新实例,它不等于您在 SUT 中传递给GetDealerStatusRequest

通常你会使用类似的东西:

x.GetDealerStatus(It.IsAny<System.Net.Http.HttpRequestMessage>())

或者

It.Is<System.Net.Http.HttpRequestMessage>(x => whatever specific equality conditions you want to match on)

如果您想将匹配条件从“任何”缩小

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM