簡體   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